我正在尝试将我们的Android应用程序转换为gradle构建.我有项目,它的库成功建立.我现在正在尝试为我们的各种环境创建单独的apks(dev/test/prod为他们使用的restful服务提供了不同的url).
在搜索时,我觉得这样做的最佳方式是为每个环境制作不同的BuildConfig.这是我试过的:
import java.util.regex.Pattern
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:+'
}
}
apply plugin: 'android'
task('increaseVersionCode') << {
def manifestFile = file("AndroidManifest.xml")
def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"")
manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig') {
task.dependsOn 'increaseVersionCode'
}
}
dependencies {
compile 'com.android.support:support-v4:19.0.0'
compile files('libs/commons-io-2.4.jar',
'libs/google-play-services.jar',
'libs/gson-2.2.4.jar',
'libs/universal-image-loader-1.8.6.jar',
'libs/wakeful-1.0.1.jar')
compile project(':pulltorefresh_lib')
compile project(':edgeeffect_lib') …Run Code Online (Sandbox Code Playgroud) android buildconfig gradle android-build android-gradle-plugin
Gradle buildConfigField BuildConfig 无法解析符号
在最新的 android studio 中,gradle 版本为 8.0.0 及以上,开发人员面临这个问题。当他们尝试使用自己的包名称导入 BuildConfig 类但它无法工作时。从导入中找不到自己的包名。因此,开发人员很困惑为什么它没有显示,并花了很多时间来解决这个问题。
但这是最新的 android studio 的 gradle 版本 8.0.0 及更高版本提供的新功能。因此,您只需在build.gradle文件中放置如下所示的简单代码即可。
android {
buildFeatures {
buildConfig = true
}
}
Run Code Online (Sandbox Code Playgroud)
为什么要使用 buildFeatures?
可以在 Android 应用程序项目中禁用或启用的构建功能列表。可以在 Android 动态功能项目中禁用或启用的构建功能列表。
构建配置
abstract var buildConfig: Boolean?
Run Code Online (Sandbox Code Playgroud)
用于启用/禁用 BuildConfig 类生成的标志。
将值设置为 null 会重置为默认值。默认值为 true。
您可以通过在构建根项目的 gradle.properties 文件中添加android.defaults.buildfeatures.buildconfig=true行来覆盖构建中所有项目的默认设置。
在项目中,我有几个flavors,几个buildTypes和几个folders组合
构建组合:
文件夹结构
在每个文件夹中我都有自定义Application class+ AndroidManifest来注册它Application class
有时,但有时构建失败并cannot find symbol出现错误:
\app\src\main\java\ru\my\package\app\environment\MyApp.java:35: error: cannot find symbol
.core(new CrashlyticsCore.Builder().disabled(!BuildConfig.ANALYTICS).build())
Run Code Online (Sandbox Code Playgroud)
或App类独立但相同的错误
\app\src\main\java\ru\my\package\presentation\presenter\impl\MainPresenterImpl.java:104: error: cannot find symbol
if (!BuildConfig.ANALYTICS) return;
Run Code Online (Sandbox Code Playgroud)
但是下一次构建可能是成功的,所以可能的流程是
注意
import问题免责声明:有些问题看起来像这个,但它们是不同的,例如
Gradle buildConfigField BuildConfig无法解析符号
UPDATE
Gradle依赖项:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation project(path: ':OVSALibrary')
implementation project(path: ':YaMapProject')
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'com.google.dagger:dagger:2.14.1'
kapt …Run Code Online (Sandbox Code Playgroud) android gradle android-studio build.gradle android-gradle-plugin