如何根据构建变体更改AndroidManifest.xml文件?

Jus*_*ain 8 android

我有一个具有多个构建变体的应用程序.这些变体用于为不同的公司构建相同应用程序的版本.所以,我有几个不同的变种,构建不同的应用程序:

  • com.acme.app1
  • com.schmoe.app2
  • com.yop.app3
  • 等等...

build.gradle文件处理得非常好:

     productFlavors {
    app1 {
        applicationId "com.acme.app1"
    }

    app2 {
        applicationId "com.schmoe.app2"
    }

    app3 {
        applicationId "com.yop.app3"
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的问题.我正在将Dropbox集成到我的应用程序中.必须为每个变体更改AndroidManifest.xml文件,以包含相应的应用程序密钥(存储在我的字符串文件中).Dropbox在清单文件中添加了以下内容:

         <activity
        android:name="com.dropbox.client2.android.AuthActivity"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboard">

        <intent-filter>
            <!-- Change this to be db- followed by your app key -->
            <data android:scheme="db-abcdef" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

每个构建变体都需要更改以下行:

 <data android:scheme="db-abcdef" />
Run Code Online (Sandbox Code Playgroud)

为每个应用程序变体的适当值.换句话说,我需要根据构建变量替换上面的部分字符串.例如

APP1

 <data android:scheme="db-111111" />
Run Code Online (Sandbox Code Playgroud)

应用2

 <data android:scheme="db-222222" />
Run Code Online (Sandbox Code Playgroud)

APP3

 <data android:scheme="db-333333" />
Run Code Online (Sandbox Code Playgroud)

对于每个变体,直到文本"db-"的行是相同的.

我需要的是用我的字符串文件中的字符串动态替换字符串的变量部分(x值)"db-xxxxxx".

我认为这可以通过gradle脚本完成,但我是gradle的完整newb.救命!

如果你可以提供帮助,请非常具体地了解自从我在gradle文件和脚本编写时出现的问题.提前致谢!

Sim*_*mas 15

您也可以保存字符串build.gradle:

productFlavors {
    app1 {
        applicationId "com.acme.app1"
        resValue "string", "my_app_key", "db-abc"
    }

    app2 {
        applicationId "com.schmoe.app2"
        resValue "string", "my_app_key", "db-def"
    }

    app3 {
        applicationId "com.yop.app3"
        resValue "string", "my_app_key", "db-ghi"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

<data android:scheme="@string/my_app_key" />
Run Code Online (Sandbox Code Playgroud)


323*_*3go 6

您可以使用字符串资源以与修改应用程序名称相同的方式执行此操作。在您的清单中,包括:

<data android:scheme="@string/db_scheme" />
Run Code Online (Sandbox Code Playgroud)

接下来,为各种构建类型添加资源文件夹,并在每个文件夹中放置资源文件的自定义副本,例如res/values/flavor.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<resources>
    <string name="app_name">Customer 1 App</string>
    <string name="db_scheme">db-111111</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

这将允许您针对不同的风格拥有不同的 API 密钥、方案、应用程序名称、图标等。