現在、Android Studioを1.0.0-RCに更新しようとしています。これにはgradle Androidプラグイン1.0.0-rc1が必要なようです。更新後、次のエラーが発生し始めました。
`Could not find property 'processManifest' on com.Android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@b9da89c.`
少し掘り下げてみると、processManifest
は .14.3バージョン で削除された非推奨のプロパティの1つであるようです。新しいプロパティ名は何ですか?同じユーザーガイドが新しいバージョン用に更新されていないため、ドキュメントが見つかりません。
編集:これは、プロパティを必要とするコードです。これを使用して、ビルド時の値をマニフェストに挿入します。
applicationVariants.all { variant ->
variant.processManifest << {
def manifestOutFile = variant.processManifest.manifestOutputFile
def newFileContents = manifestOutFile.getText('UTF-8')
.replace("{GOOGLE_MAPS_KEY}", variant.buildType.ext.google_maps_key)
manifestOutFile.write(newFileContents, 'UTF-8')
}
}
APK分割のドキュメント( http://tools.Android.com/tech-docs/new-build-system/user-guide/apk-splits )によると、このメソッドはVariantOutput
( variant.outputs
から入手可能):
非推奨の警告:現在のバリアントAPIには、出力の下に移動したいくつかのメソッドが含まれています。メソッドはまだ存在しますが、出力が2つ以上ある場合は失敗します。これらは1.0で完全に削除されます。これらは次のとおりです。
VariantOutput
の追加メソッド
ベータチャネルでAndroid Studio 1.0.0に更新した後も、このエラーが発生しました。ただし、自分のgradleファイルでprocessManifest
への参照が見つかりませんでした。検索してみると、新しいRobolectricgradleプラグインが必要であることがわかりました。
https://github.com/robolectric/robolectric-gradle-plugin/releases
Robolectric Gradleプラグインのバージョン0.14.0(およびRobolectricのバージョン2.4)を使用すると、エラーが解決しました。
私は問題の解決策を見つけることができませんでしたが、単に回避策です。 Android Gradleプラグインバージョン0.11では、 マニフェストマージ という新しいAPIが導入されています。これにより、ハッキングで許可されたのと同じことを実現できます。
必要な変更は次のとおりです。
"${GOOGLE_MAPS_KEY}"
で囲みます各BuildTypeでmanifestPlaceholders
マップを定義します。あれは:
buildTypes {
debug {
manifestPlaceholders = [GOOGLE_MAPS_KEY: "xxxxxxxxxxxxxxxxxxxx"]
}
release {
manifestPlaceholders = [GOOGLE_MAPS_KEY: "xxxxxxxxxxxxxxxxxxxx"]
}
}
それでおしまい!プラグインは、マニフェスト内のこれらの変数を自動的に置き換えます。かなりきちんと!
Android.applicationVariants.all{ variant ->
variant.outputs.each { output ->
output.processManifest.doLast{
def manifestFile = output.processManifest.manifestOutputFile
def updatedContent =manifestFile.getText('UTF-8').replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")
manifestFile.write(updatedContent, 'UTF-8')
}
}
}
この方法で変更しました。古いレイヤーの外側に新しいレイヤーを追加するだけです。これは、processManifest
がoutputs
フィールドにあるために機能します。これが役立つと思います。
私の場合、settings.gradleで指定されたライブラリフォルダーに依存しているため、このエラーが発生していました。そのフォルダには、明らかに多くの誤った構成がありました。そのため、settings.gradleから削除するとすぐに、プロジェクトは正常にコンパイルされました。