31

Trong build.gradle ứng dụng cấp của tôi, tôi có hương vị như sau:Cách sử dụng hương vị với tên ứng dụng khác nhau trong Android studio?

productFlavors { 
    originalFlavour{ 
    } 

    freeFlavour{ 
    } 
} 

Điều đang xây dựng cả hai hương vị tôi nhận được App cùng Name. Thay vào đó, tôi muốn có tên ứng dụng khác nhau cho mỗi hương vị. Chỉ cần thêm hậu tố sẽ hữu ích. Hy vọng ai đó có thể giúp tôi.

Cảm ơn trước

EDIT:

app/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="z.fncapps.etsiipod" > 

    <uses-permission 
     android:name="android.permission.CALL_PHONE" 
     android:required="false" /> 

    <uses-feature 
     android:name="android.hardware.telephony" 
     android:required="false"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <!-- actvities declared here --> 
    </application> 
</manifest> 

app/src/freeFlavour/AndroidManifest.xml

<uses-permission 
    android:name="android.permission.CALL_PHONE" 
    android:required="false" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<uses-feature 
    android:name="android.hardware.telephony" 
    android:required="false" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <!-- actvities declared here --> 
</application> 

Trả lời

58

Tháo chuỗi app_name từ file strings.xml hiện tại của bạn, sau đó bạn có thể làm điều này:

productFlavors { 
    originalFlavour{ 
     resValue "string", "app_name", "Original Flavor Name" 
    } 

    freeFlavour{ 
     resValue "string", "app_name", "Free Flavor Name" 
    } 
} 

Sau đó, tài liệu tham khảo hiện có để @string/app_name trong bạn manifest sẽ đề cập đến một nguồn tài nguyên chuỗi tạo ra, đó là dựa trên hương vị được chọn.

Lưu ý rằng nếu bạn chỉ định nhãn cho Hoạt động khởi chạy của mình (bằng cách xác định thẻ android:label xml trong phần tử <activity>), giá trị đó sẽ được sử dụng ở nhiều địa điểm hiển thị của người dùng thay vì nhãn của ứng dụng. Để khắc phục điều này cho trường hợp của bạn, bạn chỉ có thể xóa nhãn khỏi phần tử <activity> hoàn toàn. Xem https://stackoverflow.com/a/13200774/2911458 để biết thêm chi tiết về sự khác biệt này.

+0

Bạn cũng có thể đặt nó để gỡ lỗi hương vị và hương vị phát hành không? Ngoài ra, tôi có thể tìm thêm thông tin về "resValue" ở đâu? Ví dụ, những loại giá trị tôi có thể đặt ở đó (phong cách có thể?)? –

+2

Để trả lời câu hỏi đầu tiên của bạn: có, điều này cũng hoạt động đối với các loại xây dựng (gỡ lỗi, phát hành, v.v.). Từ [ghi chú phát hành cho v0.8.1 của plugin gradle] (http://tools.android.com/tech-docs/new-build-system): "Bây giờ bạn có thể sử dụng resValue , , trên các loại xây dựng và hương vị sản phẩm giống như cách bạn có thể sử dụng buildConfigField. " – stkent

+1

Đối với câu hỏi thứ hai của bạn; Tôi không chắc. Tôi đã thử xem qua [Tài liệu DSL trình cắm của Android] (https://developer.android.com/tools/building/plugin-for-gradle.html), nhưng không thể tìm thấy bất kỳ đề cập nào về phương thức resValue hoặc buildConfigField trong Các loại (ProductFlavor/GroupableProductFlavor, BuildType). Có thể các tài liệu không được cập nhật. Tôi sẽ đề nghị một số thí nghiệm để tìm ra nếu các giá trị không phải chuỗi được chấp nhận! – stkent

18

Bạn có thể sử dụng một nguồn tài nguyên chuỗi trong AndroidManifest.xml:

<application android:label="@string/app_name"> 

Và sau đó sử dụng các file tài nguyên giá trị khác nhau cho mỗi hương vị trong ../app/src/ thư mục:

../app/src/

Chìa khóa của giải pháp này là bạn có thể tạo các tệp strings.xml được bản địa hoá bên trong mỗi thư mục giá trị cho mỗi vị trí:/res/values ​​/,/res/values-pt /,/res/values-es /, v.v.

Mỗi string.xml có thể có tên ứng dụng cục bộ, mặc định (/ res/values ​​/) cho miễn phí Flavor Tên có thể là:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Free Flavor Name</string> 
</resources> 
+0

đây là cách tiếp cận tốt hơn theo ý kiến ​​của tôi để bản địa hóa – Bruce

+0

Đồng ý nếu bạn đang bản địa hóa tên ứng dụng; Tôi nghĩ rằng đó là một chút máy móc không cần thiết và indirection nếu không. – stkent

+0

Chúng tôi cũng có thể sử dụng ManifestPlaceholder cho nó. – Nepster

0

Vì bạn đã có một biểu hiện riêng cho hương vị miễn phí, tại sao không gán nhãn của nó cho một giá trị tài nguyên chuỗi khác nhau?

android:label="@string/free_app_name" 
Các vấn đề liên quan