BuildConfig wird nicht korrekt erstellt (Gradle Android)
Ich versuche zu konvertieren, unsere Android-Anwendung zu einem gradle-build. Ich habe das Projekt und die Bibliotheken-Gebäude erfolgreich. Ich bin jetzt versucht, erstellen Sie separate apks für unsere verschiedenen Umgebungen (dev/test/prod unterschiedliche urls für die Rest-Dienste, die Sie verzehren).
In der Suche rund um die beste Art und Weise, die ich fühle, dies zu tun ist mit verschiedenen BuildConfig für jede Umgebung. Dies ist, was ich versucht habe:
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']
}
}
}
Problem ist, dass mein BuildConfig.java nicht scheinen, um die statischen Variablen injiziert, daher bekomme ich Fehler wie:
/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
Meine build/source/buildConfig/debug/com/.../BuildConfig.java Datei enthält:
/**
* 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;
}
Was mache ich falsch?
InformationsquelleAutor der Frage Innova | 2013-12-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie bitte sicher, dass Sie bauen "dev" oder "prod" - Variante. Es gibt keine BuildConfig definition in Verzug "debug" und "release" - Variante. In Android Studio, können Sie aktuelle Variante in der unteren linken Ecke:
Vereinfachen bauen.gradle-Datei können Sie definieren:
dann verwenden Sie einfach Standard - "debug" und "release" - Varianten.
Endlich, löschen Sie das Semikolon (Zeichen: ';') aus dem Wert des buildConfigField parameter.
InformationsquelleAutor der Antwort Peter Knut
Ich hatte dasselbe Problem und es behoben wie folgt:
InformationsquelleAutor der Antwort savepopulation
Nur für den Fall, dass hilft jemand anderes, in meinem Fall war es eine fehlende importieren:
import uk.co.yourpackage.yourapp.BuildConfig;
Irgendwie nirgends in der doc hat es zu erwähnen, Sie benötigen, gehören! Hat mich glaube, es war automatisch importiert, irgendwie IST es aber NICHT. nicht für mich zumindest... So viel Zeit verloren... Hoffe, das hilft anderen newbie wie mir!!!
InformationsquelleAutor der Antwort Litome
Ich hatte ähnliches problem im Zusammenhang mit den build-Arten-setup verwenden .initWith(someotherbuildtype), BuildConfig wurde nicht ordnungsgemäß erstellt. Ich hatte die Schalter auf der übergeordneten build-Variante und bauen, die erste, dann die build-Typen, die initWith der übergeordneten integrierten fine.
InformationsquelleAutor der Antwort straya