将Android Studio升级到版本0.4.0后,我遇到了一个新错误:
我通过gradle-wrapper.properties升级到gradle 1.9
distributionUrl=http\://services.gradle.org/distributions/gradle-1.9-all.zip
Run Code Online (Sandbox Code Playgroud)
并在build.gradle中升级了gradle版本
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
Run Code Online (Sandbox Code Playgroud)
现在我的项目正在重建.
我为不同的productFlavors定义了一些String常量:
productFlavors {
local {
buildConfig "public static final String MY_KEY = \"\";"
}
alpha {
buildConfig "public static final String MY_KEY = \"XXXXX-XXXXX-XXX\";"
}
beta {
buildConfig "public static final String MY_KEY = \"YYYYY-YYYYY-YYY\";"
}
}
Run Code Online (Sandbox Code Playgroud)
这是新的错误
找不到参数的方法buildConfig() [public static final String MY_KEY ="";] on GroupableProductFlavorDsl_Decorated {name = local,minSdkVersion = -1,targetSdkVersion = -1,renderscriptTargetApi = -1,renderscriptSupportMode = null,renderscriptNdkMode = null, versionCode = -1,versionName = null,packageName = null,testPackageName = …
android gradle android-studio build.gradle android-gradle-plugin
我想我的问题很常见.我有一个相当大的gradle代码库,我使用产品风格生成自定义版本.这些产品口味通常需要一个或多个类的定制版本src\main\java.
我已经阅读了Gradle文档,并且在查看同一个问题时也遇到了以下问题:
使用Build Flavors - 正确构建源文件夹和build.gradle 为同一类的不同版本构建flavor
我明白为什么你不能src\main\java在你的口味中定义相同的类,但是将类从src\main\java你的产品风格转移到你的产品风味中的解决方案有一个相当大的缺点.当您将类移动src\main\java到最新版本以进行自定义时,您还需要将该类的原始非自定义版本的副本移动到其他所有以前的产品类型中,否则它们将不再构建.
您可能只需要每次从原始文件调整一个或两个不同的类(然后必须将这些类重新分配到flavor目录),但随着时间的推移,移动的类的数量将会生成,剩余的数量src\main\java将减少每个类你必须这样做的时间.最终,大多数类都会有各种风格(即使大多数类都是原件的副本)并且src\main\java几乎是空的,有点打败了整个Gradle构建结构的目的.
此外,您需要保持每次开始新口味时可以克隆的"默认"风格,因此您知道根据原始代码库开始使用所有类.
使用BuildConfig中的字段来定义是否应该使用自定义类:
buildConfigField 'boolean', 'CUSTOM_ACTIVITY_X', 'true'
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下代码:
final Intent intent = new Intent();
...
if (BuildConfig.CUSTOM_ACTIVITY_X) {
intent.setClass(ThisActivity.this, CustomActivityX.class);
} else {
intent.setClass(ThisActivity.this, DefaultActivityX.class);
}
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
每种风味仍然需要一个副本CustomActivityX,但它可以只是一个虚拟的空类,你知道它不会被使用.这意味着您的默认版本的类始终保留在src\main\java.
虽然试图摆脱对其他所有风格的虚拟CustomActivityX的需求,但我已经看过了Class.forName().
例如:
final Class activityX;
if (BuildConfig.CUSTOM_ACTIVITY_X) {
try {
activityX = Class.forName("CustomActivityX");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else …Run Code Online (Sandbox Code Playgroud) 我有一个在 Google Play 商店中为我的用户发布的应用程序(比如 1000 个用户)。我想为这些用户的子集(比如 10 个用户)发布应用程序的 QA 版本。当我完成发布应用程序的 alpha 版本的过程时,我注意到我无法再下载生产版本。我可以下载 alpha 或生产(如果我取消注册为 alpha 用户)。
在 Google Play 商店以及我的 android 设备上拥有我的应用程序的 QA 和 PROD 版本的唯一方法是在 play.google.com 上创建多个应用程序吗?或者我是否可以拥有同一应用程序的 alpha 版本和生产版本,并且能够在同一设备上安装这两个版本?