为构建风格更改包名称(不仅是 applicationId)

Ale*_*rov 5 android build package gradle

在同一个代码库上构建多个可白化的应用程序时,可以轻松使用 Android Studio 的构建风格机制。我可以轻松地applicationId在 build.gradle 文件中设置一个新的。

android {
    productFlavors {
        original {
            applicationId "com.original.myapp"
        }
        whitelable {
            applicationId "com.whitelable.myapp"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但可白化应用程序的包名称仍然com.original.myapp是,主要活动的组件名称是com.whitelable.myapp/com.original.myapp.MainActivity. 每个人都可以看到可白化的应用程序是建立在原始应用程序的基础上的。

是否有一种方法可以替换构建风味的包名称,以便原始包名称至少不会出现在风味应用程序的组件名称中?

Dev*_*tak 0

这个问题很久以前就被问到了,但我想为即将调查的新人回答这个问题。首先,您必须使用 Flavors 创建 2 个版本。然后,如果您正在使用它,则需要在 google-service.json 文件的“client”: [] 部分中为刚刚创建的版本创建数据。(您还可以在各自的包文件夹中为两者创建单独的 google-service.json 文件。)然后使用 ${packageName} 而不是在清单文件中使用包路径显式键入包路径。我能够按照这种方式创建 2 个完全不同的 packageNames。

口味;

flavorDimensions "default"
productFlavors{
    product1{
        applicationId "com.product.package"
    }

    product2{
        applicationId "com.white.label"
    }
}
Run Code Online (Sandbox Code Playgroud)

谷歌服务.json;我无法共享 google-service.json 文件,但您将通过 Firebase 收到的新项目的 google-service.json 文件中“client”下的数据应复制并添加到“client”作为第二个数据项目中的 google-service.json 文件。样本;

"client": [
{
  "client_info": { //Old App Info
    data...
  },
  ...
},
{
  "client_info": {
    //New App Info
    data...
  },
  ...
}
]
Run Code Online (Sandbox Code Playgroud)

显现;

com.project.package.fileprovider
Run Code Online (Sandbox Code Playgroud)

用这个代替

${packageName}.fileprovider
Run Code Online (Sandbox Code Playgroud)