コードを生成するために注釈プロセッサ(Android注釈)を使用しているGradleビルドスクリプトがあります。新しいPro Flavorを追加するまで、建物はうまくいきました。 フリーフレーバーを構築できますが、Proフレーバーを作成すると、アノテーションプロセッサーは実行されません。これによりコードが失われ、ビルドが失敗します。 を構築する場合Gradle +注釈+ Flavors =注釈プロセッサを実行しません
Note: Starting AndroidAnnotations annotation processing
:Gradleの出力には、以下で示されるように
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}
ext.androidAnnotationsVersion = '3.0-SNAPSHOT';
configurations {
apt
}
dependencies {
compile files('libs/android-support-v13.jar')
compile fileTree(dir: 'libs', include: '*.jar')
apt "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
compile "org.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 17
versionCode 29
versionName "2.0.3"
packageName "com.MyCompany.MyApp"
}
productFlavors {
free {
buildConfig "final public static boolean PRO_VERSION = false;"
}
pro {
packageName "com.MyCompany.MyApp.Pro"
versionName (versionName + ".Pro")
buildConfig "final public static boolean PRO_VERSION = true;"
}
}
buildTypes {
release {
buildConfig "final public static String BASE_URL = \"http://data.MyCompany.com/\";", \
"final public static String APP_NAME = \"com.MyCompany.MyApp\";"
}
debug {
buildConfig "final public static String BASE_URL = \"http://192.168.1.15/GDM/\";", \
"final public static String APP_NAME = \"com.MyCompany.MyApp\";"
}
}
}
def getSourceSetName(variant) {
return new File(variant.dirName).getName();
}
android.applicationVariants.all { variant ->
def aptOutputDir = project.file("build/source/apt")
def aptOutput = new File(aptOutputDir, variant.dirName)
println "****************************"
println "variant: ${variant.name}"
println "manifest: ${variant.processResources.manifestFile}"
println "aptOutput: ${aptOutput}"
println "****************************"
android.sourceSets[getSourceSetName(variant)].java.srcDirs+= aptOutput.getPath()
variant.javaCompile.options.compilerArgs += [
'-processorpath', configurations.apt.getAsPath(),
'-AandroidManifestFile=' + variant.processResources.manifestFile,
'-s', aptOutput
]
variant.javaCompile.source = variant.javaCompile.source.filter { p ->
return !p.getPath().startsWith(aptOutputDir.getPath())
}
variant.javaCompile.doFirst {
aptOutput.mkdirs()
}
}
無料バリアントを構築し、注釈プロセッサが実行されます。ここでは
は私のスクリプトですProの亜種の場合、注釈プロセッサは実行されないため、生成されたコードへの参照は失敗します。これは興味深いことですが、スクリプトからpackageName "com.MyCompany.MyApp.Pro"
を削除すると(実際には偶然によって)注釈プロセッサが実行され、正しく構築されることが判明しました。 Google Playのパッケージ名を更新する必要があります。アンドロイドスタジオで見たとき、私は選択FreeDebugビルドバリアントを持っている場合でも
は、あなたが(注釈処理ツール)のaptがアクティブであるとしてプロバージョンを示していることがわかります。私はこれが問題を示唆しているのか、これがベータアンドロイドスタジオ(Androidスタジオバージョン:0.2.13)に問題があるのかはわかりません。だから塩の穀物でそれを取る。
私はGradleのビルドシステムへの新たなんだけど、私はは、私はそれのこつを得ていたを考えました。私はスクリプトを何度も見てきましたが、プロの亜種について、なぜ注釈プロセッサが実行されていないのか分かりません。また、--infoと--debugの引数でラッパーを実行する以外にも、これらの問題をデバッグする方法はまだわかりません。
私は、拡張出力を得るために -infoと-debugでのGradleラッパーを実行しましたが、それは行方不明に起因するエラーに達するまで、その他のエラー(または不足している項目)を示しますが、何もありません生成されたコード。だから、これは、アンドロイドのアノテーションが根本的な問題であるその変種で実行されていないということだけを信じるようになります。 (つまり、これは上流の何かによって引き起こされたエラーではなく、後で間違っているかもしれません)
私は本当に失われており、2日間このままで立ち往生しています。
ソリューションを共有していただきありがとうございます。 – ruX
素晴らしい!ありがとうございます!基本的なパッケージ名をプログラムで取得する方法はありますか? –
10月に私はそれをやることができるかどうか簡単に見ました。それは完全に明白なものではありませんでした。私は厳密なタイムラインを持っていたので、それを非常に徹底的に追求しませんでした。理論的にはそれを引っ張ることが可能であるべきですが、私はそれを行う方法を手で知らない。 –