Android 上的“产品风味”
有时我被问到如何使用不同的主机、图标甚至包名称,这取决于同一应用程序的不同版本。
这样做的原因有很多,而且有一种简单的方法:产品风味。
你可以在你的 build.gradle 脚本中定义我之前描述过的这些东西。
产品风味
本文的一部分是对产品风味的思考,那么,它们是什么?关于Android文档:
产品风格定义了项目构建的应用程序的定制版本。单个项目可以有不同的风格,这些风格会改变生成的应用程序。
你如何定义它们?你必须在你的 build.gradle 上写下你想要定义的风格:
productFlavors {
...
devel {
...
}
prod {
...
}
}
现在,我们将拥有两种不同风格的应用程序。您也可以在 Android Studio 的 Build Variants 选项卡中查看它
构建变体
多个包名
如果您想在手机上安装一个处于开发状态的应用程序和一个用于生产状态的应用程序怎么办。您可能知道,您只能安装一个具有相同软件包名称的应用程序(如果您尝试安装一些与手机上安装的相同的新 APK,它会尝试更新它)。
您唯一需要做的就是在每种产品风味上定义它:
android {
productFlavors {
devel {
applicationId "zuul.com.android.devel"
}
prod {
applicationId "zuul.com.android"
}
}
}
根据风味向多个主机发送请求和以前一样,您必须在产品风味配置字段中包含一些参数。
android {
productFlavors {
devel {
applicationId "zuul.com.android.devel"
buildConfigField 'String', 'HOST', '"http://192.168.1.34:3000"'
}
prod {
applicationId "zuul.com.android"
buildConfigField 'String', 'HOST', '"http://api.zuul.com"'
}
}
}
作为示例,我们将尝试向您展示如何将其与 Retrofit 集成以将请求发送到适当的服务器,而无需根据风格处理您指向的服务器。在这种情况下,这是 Zuul android 应用程序的摘录:
public class RetrofitModule {
public ZuulService getRestAdapter() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BuildConfig.HOST)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
return restAdapter.create(ZuulService.class);
}
}
如您所见,您只需使用 BuildConfig 类来访问您刚刚定义的变量。
任何可通过您的代码获得的变量 HOST 变量并不是您可以在代码中公开的唯一变量。您可以随心所欲地做到这一点:
prod {
applicationId "zuul.com.android"
buildConfigField 'String', 'HOST', '"http://api.zuul.com"'
buildConfigField 'String', 'FLAVOR', '"prod"'
buildConfigField "boolean", "REPORT_CRASHES", "true"
}
您可以按如下方式访问它们:
BuildConfig.HOST
BuildConfig.FLAVOR
BuildConfig.REPORT_CRASHES
每种口味不同的图标如果您想每种口味有不同的图标,这样您就可以直观地检测出您正在打开哪个图标(您也可以通过名称来做到这一点......但它不适合空间!),您只需为每种口味定义新的目录结构。
在我刚刚使用的示例中,有两种风格:devel 和 prod。然后,我们可以定义两个新的目录结构,这样我们就可以定义我们想要的资源:
结构体
这适用于其他类型的资源strings.xml, integers.xml, arrays.xml
,例如 等。
配置签名设置
要使用 Gradle 构建配置为您的发布构建类型手动配置签名配置:
1.创建一个密钥库。密钥库是包含一组私钥的二进制文件。您必须将密钥库保存在安全可靠的地方。2.创建私钥。私钥表示要通过应用程序标识的实体,例如个人或公司。3.将签名配置添加到模块级的build.gradle文件中:
android {
...
defaultConfig {...}
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
生成签名的 APK:
要生成签名 APK,请从主菜单中选择 Build > Generate Signed APK。app/build/apk/app-release.apk 中的包现在已使用您的发布密钥进行签名。
参考:https ://developer.android.com/studio/build/build-variants.html#signing,http://blog.brainattica.com/how-to-work-with-flavours-on-android/