对于Android手机来说,不同渠道的应用使用不同的界面和逻辑是常有的事。甚至有时候同一个App还得以不同的名称和面貌出现。如果需要使这些不同面貌但内在一样的App能在同一部手机上安装,那就需要使用不同的包名。那么我们预先设置好不同渠道的打包方式,日后的维护就很简单了。
这里几个基本点列一下。
1.设置渠道
在build.gradle里设置
defaultConfig {
...
flavorDimensions "money"
}
...
productFlavors {
green_site {
dimension "money"
}
home_site {
dimension "money"
}
}
以上就设置了两个渠道,只不过这两个渠道没有设置任何个性化的区别,暂时还没有意义。
2.设置不同的logo和名称
我们加一点细节
productFlavors {
green_site {
dimension "money"
resValue "string", "app_name", "绿色版"
manifestPlaceholders = [app_icon: "@mipmap/logo_4_green"]
}
home_site {
dimension "money"
resValue "string", "app_name", "正式版"
manifestPlaceholders = [app_icon: "@mipmap/logo"]
}
}
这里通过resValue
加入了应用名称的设置。要注意的是需要把原先strings.xml
文件中的app_name
去掉,不然会冲突。
然后通过manifestPlaceholders
设置AndroidManifest
中可以使用的变量。这里我们设置了app_icon
。
那么对应的,在AndroidManifest
中以"${app_icon}"
的形式调用以上变量设置logo。
现在我们在不同渠道下有不同的名称和logo了。
但是,这两个安装包还无法在同一部手机上并存,因为他们的包名是一样的,本质上还是同一个App。
3.设置不同的包名
productFlavors {
green_site {
dimension "money"
resValue "string", "app_name", "绿色版"
applicationId "com.greenapp"
manifestPlaceholders = [app_icon: "@mipmap/logo_4_green"]
}
home_site {
dimension "money"
resValue "string", "app_name", "正式版"
applicationId "com.myapp"
manifestPlaceholders = [app_icon: "@mipmap/logo"]
}
}
这里我们添加了applicationId
。
然后,在build.gradle里调用他。
defaultConfig {
applicationId "${applicationId}"
...
}
现在,我们打包出来后相当于两个App,可以同时在一部手机上安装了。
这里要注意的是打包的签名也要设置不同的文件,很多平台是要认签名的。
4.设置不同的FileProvider
如果你的App有使用FileProvider
。那么还要设置一下,毕竟FileProvider
是和包名关联的。不然会报同名错误。
我们再增加一个变量authorities
productFlavors {
green_site {
dimension "money"
resValue "string", "app_name", "绿色版"
applicationId "com.greenapp"
manifestPlaceholders = [app_icon: "@mipmap/logo_4_green",authorities:"com.greenapp.FileProvider"]
}
home_site {
dimension "money"
resValue "string", "app_name", "正式版"
applicationId "com.myapp"
manifestPlaceholders = [app_icon: "@mipmap/logo",authorities:"com.myapp.FileProvider"]
}
}
然后在AndroidManifest
中设置Provider
以上,完工。