Android上的“产品口味”
有时有人问我如何使用不同的主机,图标甚至程序包名称,具体取决于同一应用程序的不同版本。
这样做有很多原因,而且有一种简便的方法:产品调味剂。
您可以在build.gradle脚本中定义我之前描述的这类内容。
产品口味
本文的一部分是关于产品口味的书面思考,那么,它们是什么?关于Android文档:
产品风格定义由项目构建的应用程序的定制版本。一个项目可以具有改变生成的应用程序的不同风格。
您如何定义它们?您必须在build.gradle上编写要定义的风味:
productFlavors {
...
devel {
...
}
prod {
...
}
}
现在,我们将拥有两种不同风格的应用程序。您也可以在Build Variants选项卡中的Android Studio上对其进行检查
构建变体
多个包装名称
如果您想在手机上安装一个处于开发状态而另一个处于生产状态的应用程序,该怎么办。如您所知,您只能安装一个具有相同程序包名称的应用程序(如果您尝试安装一些与手机上安装的APK相同的新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);
}
}
如您所见,您只需要使用BuildConfigclass来访问刚刚定义的变量。
通过代码可获得的任何变量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,请从主菜单中选择“构建”>“生成签名的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-flavors-on-android/
applicationId
现在支持而不是packageName
。