如何在Android studio中使用具有不同应用名称的风味?

fap*_*pps 37 android android-studio build.gradle android-gradle-plugin android-productflavors

在我的app级build.gradle中,我有以下几种风格:

productFlavors {
    originalFlavour{
    }

    freeFlavour{
    }
}
Run Code Online (Sandbox Code Playgroud)

事情是建立两种口味我得到相同的应用程序名称.相反,我希望每种口味都有不同的应用程序名称.只需添加后缀即可.希望有人可以帮助我.

提前致谢

编辑:

应用程序/ SRC /主/ 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>
Run Code Online (Sandbox Code Playgroud)

应用程序/ 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>
Run Code Online (Sandbox Code Playgroud)

stk*_*ent 72

app_name从现有strings.xml文件中删除字符串,然后您可以执行此操作:

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

    freeFlavour{
        resValue "string", "app_name", "Free Flavor Name"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,@string/app_name清单中的现有引用将引用生成的字符串资源,该资源基于所选的flavor.

请注意,如果为启动活动指定标签(通过android:label<activity>元素中定义xml标记),则该值将用于许多用户可见的位置,而不是应用程序的标签.为了克服这种情况,您可以完全删除<activity>元素中的标签.有关此区别的更多详细信息,请参阅/sf/answers/924054211/.

  • 回答你的第一个问题:是的,这也适用于构建类型(调试,发布等).从[gradle插件的v0.8.1发行说明](http://tools.android.com/tech-docs/new-build-system):"你现在可以使用resValue <type>,<name>,构建类型和产品风格的<value>与使用buildConfigField的方式相同." (3认同)
  • 尼斯.我现在测试了"app_name",但Android-Studio声称我已经拥有了这个("重复资源......").我该如何避免这种情况?是因为,正如您所写,我需要从"strings.xml"文件中删除"app_name"?如何避免删除(已翻译)? (2认同)

cru*_*bio 23

您可以在AndroidManifest.xml中使用字符串资源:

<application android:label="@string/app_name">
Run Code Online (Sandbox Code Playgroud)

然后在../app/src/文件夹中为每种风格使用不同的值资源文件:

../app/src/

此解决方案的关键是您可以在每个值文件夹中为每个flavor创建本地化的strings.xml文件:/ res/values /,/ res/values-pt /,/ res/values-es /等.

每个string.xml都可以将应用程序名称本地化,Free Flavor Name的默认值(/ res/values /)可以是:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Free Flavor Name</string>
</resources>
Run Code Online (Sandbox Code Playgroud)