web-dev-qa-db-ja.com

com.Android.build.gradle.internal.api.ApplicationVariantImplでプロパティ 'processManifest'が見つかりませんでした

現在、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')
        }
    }
19
verybadalloc

APK分割のドキュメント( http://tools.Android.com/tech-docs/new-build-system/user-guide/apk-splits )によると、このメソッドはVariantOutputvariant.outputsから入手可能):

非推奨の警告:現在のバリアントAPIには、出力の下に移動したいくつかのメソッドが含まれています。メソッドはまだ存在しますが、出力が2つ以上ある場合は失敗します。これらは1.0で完全に削除されます。これらは次のとおりです。

  • get/setOutputFile
  • getProcessResources
  • getProcessManifest
  • getPackageApplication/Library
  • getZipAlign

VariantOutputの追加メソッド

  • 文字列getAbiFilter()
  • 文字列getDensityFilter()
  • タスクgetAssemble()
  • 文字列getName()
  • 文字列getBaseName()
  • 文字列getDirName
  • set/getVersionOverride //オプションのversionCodeオーバーライド
  • int getVersionCode()//出力からversionCodeオーバーライドを返すか、バリアント自体からversionCodeを返します
8
Scott Barta

ベータチャネルでAndroid Studio 1.0.0に更新した後も、このエラーが発生しました。ただし、自分のgradleファイルでprocessManifestへの参照が見つかりませんでした。検索してみると、新しいRobolectricgradleプラグインが必要であることがわかりました。

https://github.com/robolectric/robolectric-gradle-plugin/releases

Robolectric Gradleプラグインのバージョン0.14.0(およびRobolectricのバージョン2.4)を使用すると、エラーが解決しました。

51
Kio Krofovitch

私は問題の解決策を見つけることができませんでしたが、単に回避策です。 Android Gradleプラグインバージョン0.11では、 マニフェストマージ という新しいAPIが導入されています。これにより、ハッキングで許可されたのと同じことを実現できます。

必要な変更は次のとおりです。

  • マニフェストに挿入する変数を"${GOOGLE_MAPS_KEY}"で囲みます
  • 各BuildTypeでmanifestPlaceholdersマップを定義します。あれは:

    buildTypes {
        debug {
            manifestPlaceholders = [GOOGLE_MAPS_KEY: "xxxxxxxxxxxxxxxxxxxx"]
        }
        release {
            manifestPlaceholders = [GOOGLE_MAPS_KEY: "xxxxxxxxxxxxxxxxxxxx"]
        }
     }
    

それでおしまい!プラグインは、マニフェスト内のこれらの変数を自動的に置き換えます。かなりきちんと!

10
verybadalloc
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')
    }
}

}

この方法で変更しました。古いレイヤーの外側に新しいレイヤーを追加するだけです。これは、processManifestoutputsフィールドにあるために機能します。これが役立つと思います。

6
vfs1234

私の場合、settings.gradleで指定されたライブラリフォルダーに依存しているため、このエラーが発生していました。そのフォルダには、明らかに多くの誤った構成がありました。そのため、settings.gradleから削除するとすぐに、プロジェクトは正常にコンパイルされました。

0
IgorGanapolsky