2016-11-18 6 views
0

これは私には何も新しいことではありません。GoogleがAndroidスタジオバージョン2.2.2用のGradleプラグインをリリースする前にこれを数ヶ月間行っており、ファイルルックアップ機能が壊れています。Android Gradle Build - アセットディレクトリのプロパティファイルに環境変数を挿入する方法は?

ユースケース:

が、私はAndroidのスタジオ内だけでなく、ジェンキンスからGradleのビルドを実行しています。私はいくつかのビルド情報をビルドに渡す必要があり、それをコードで使用したいと考えています。これらの値には、システム情報、ビルドバリアント、ビルド日付、関連ビルドフレーバのIPアドレスが含まれます。私は2.1.3

android.applicationVariants.all { variant -> 
    variant.mergeResources.doLast { 
     File propsFile = file("${buildDir}/intermediates/assets/${variant.dirName}/config.properties") 
     println("Filtering resource file: " + propsFile) 
     String content = propsFile.getText('UTF-8') 
     println("File contents: " + content) 
     content = content.replaceAll(/@[email protected]/, buildDate) 
       .replaceAll(/@[email protected]/, buildMode) 
       .replaceAll(/@[email protected]/, serverUrl) 
     propsFile.write(content, 'UTF-8') 
    } 
} 

からGradleの2.2.2に切り替える前に

は、上記のコードはintermediate/assets/${variant.dirName}パスでconfig.propertiesファイルのために検索します。ファイルは、@ .. @でマークされたトークンをreplaceAllメソッドに渡された変数に置き換えるために処理されます。

今私の問題は、次のとおりです。

コードが新しいのGradleプラグインのバージョン2.2.2で動作するようになっていました。しかし、私は新しいビルドが中間ディレクトリ内のアセットフォルダを生成しないので、上記のコードは、ファイルを検索するために失敗し、次のエラーをスローすることが観察さ:

Execution failed for task ':app:mergeDebugResources'. 
> /home/pawan/git/MyApplication/app/build/intermediates/assets/debug/config.properties (No such file or directory) 

新しいバージョンが方法を変えたことは明らかですビルド操作が機能します。今質問は、どうすればこの点から進めばいいのですか?どのように目的の機能を達成するには?回避策または修正プログラム

+0

をあなたはキャッシュを無効にしようとしたことがあり、再起動して、プロジェクトを再構築しますか? –

+0

@ArsenSenchはい、ありました。これは効果がありません。 – Pawan

答えて

0

Build Environmentがお手伝いします。 gradle.propertiesに環境変数を定義し、デフォルト値を割り当てることができます。あなたbuild.gradleファイルでは、そのような環境変数だけです。あなたのジーンズでは、gradlewを使用して変数に必要な値を割り当て、デフォルト値が置き換えられます。あなたのgradle.propertiesで例えば

、:あなたのbuild.gradle

versCode=100 

:あなたのjenkensで

defaultConfig { 
    // Other configs 
    versionCode versCode as Integer 
} 

は、スクリプトの構築:

./gradlew -PversCode=200 build 
+0

これは、不足資産ディレクトリの問題をどのように解決しますか?どのようにビルドスクリプトの変数の値を取得することができますが、アセットディレクトリのファイルに渡すことができませんでした。 Btw、私はgradleラッパーを使用しません。私はgradle(インストールから)を使用します。 – Pawan

+0

アセットディレクトリは使用しません。 'gradle.properties'を使用したい場合は、' gradlew'でディレクトリに置く必要があります。もしgradleを使っているのであれば、 'gradle'というディレクトリがあり、その中にgradle wrapperがあると思います。 – utzcoz

関連する問題