我正在尝试将我们的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') compile project(':viewpagerindicator_lib') } android { buildToolsVersion "18.1.1" compileSdkVersion "Google Inc.:Google APIs:18" defaultConfig { minSdkVersion 14 targetSdkVersion 18 } buildTypes { debug { packageNameSuffix ".debug" } dev.initWith(buildTypes.debug) dev { buildConfigField "String", "URL_SEARCH", "\"https://dev-search.example.com\";" buildConfigField "String", "URL_CONNECT", "\"https://dev-connect.example.com\";" buildConfigField "String", "URL_SVC_NEWSLIST", "\"https://dev-mobilenews.example.com/newslist\";" buildConfigField "String", "URL_SVC_NEWSDETAIL", "\"https://dev-mobilenews.example.com/newsdetail\";" buildConfigField "String", "URL_SVC_REGISTERENDPOINTS", "\"https://dev-mobilenews.example.com/registerendpoints\";" } prod.initWith(buildTypes.release) prod { buildConfigField "String", "URL_SEARCH", "\"https://search.example.com\";" buildConfigField "String", "URL_CONNECT", "\"https://connect.example.com\";" buildConfigField "String", "URL_SVC_NEWSLIST", "\"https://mobilenews.example.com/newslist\";" buildConfigField "String", "URL_SVC_NEWSDETAIL", "\"https://mobilenews.example.com/newsdetail\";" buildConfigField "String", "URL_SVC_REGISTERENDPOINTS", "\"https://mobilenews.pdc-np-cf.lmig.com/registerendpoints\";" } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } }
问题是我的BuildConfig.java似乎没有注入静态变量,因此我得到类似于的错误:
/Users/path/to/project/MainActivity.java:348: error: cannot find symbol startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(BuildConfig.URL_SEARCH))); ^ symbol: variable URL_SEARCH location: class BuildConfig /Users/path/to/project/MainActivity.java:359: error: cannot find symbol startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(BuildConfig.URL_CONNECT))); ^ symbol: variable URL_CONNECT location: class BuildConfig /Users/path/to/project/MainActivity.java:600: error: cannot find symbol HttpPost httpPost = new HttpPost(BuildConfig.URL_SVC_REGISTERENDPOINTS); ^ symbol: variable URL_SVC_REGISTERENDPOINTS location: class BuildConfig /Users/path/to/project/service/AlarmNotificationService.java:145: error: cannot find symbol String requestUrl = BuildConfig.URL_SVC_NEWSLIST + "?" ^ symbol: variable URL_SVC_NEWSLIST location: class BuildConfig /Users/path/to/project/service/NewsService.java:240: error: cannot find symbol String requestUrl = BuildConfig.URL_SVC_NEWSLIST + "?" ^ symbol: variable URL_SVC_NEWSLIST location: class BuildConfig /Users/path/to/project/service/NewsService.java:530: error: cannot find symbol HttpPost httpPost = new HttpPost(BuildConfig.URL_SVC_NEWSDETAIL); ^ symbol: variable URL_SVC_NEWSDETAIL location: class BuildConfig 6 errors
我的build/source/buildConfig/debug/com /.../ BuildConfig.java文件包含:
/** * Automatically generated file. DO NOT MODIFY */ package com....; public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String PACKAGE_NAME = "com.....debug"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = ""; public static final int VERSION_CODE = 5; }
我究竟做错了什么?