web-dev-qa-db-ja.com

Android Studioを使用してgradleでシステム環境変数を使用する適切な方法

Android Studioを使用してUbuntu 14.04システムでプロジェクトをビルドしています。

私のbuild.gradleファイルには、gitリポジトリにstoreFile、storePassword、keyAlias、keyPasswordをハードコーディングしないように、次のように記述しました。

_signingConfigs {
 debug {

    storeFile file(System.getenv("KEYSTORE"))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }
_

しかし、gradle syncは次のエラーを出力します:Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj'

私の.bashrcには、_source ~/.gradlerc_が含まれ、〜/ .gradlercには以下が含まれます。

_export KEYSTORE="/home/myname/keystore/mykey"
export KEYSTORE_PASSWORD='mypass'
export KEY_ALIAS='mykey'
export KEY_PASSWORD='keypass'
_

これらの変数がシェルによって正しくインポートされることを確認しました。ただし、Android Studioのビルド環境で受信されない理由がわかりません。

Gradleで環境変数を使用する適切な方法は何ですか?

26
Joel G Mathew

また、プロジェクト内ではなく、環境変数に関するキーストア情報を持っているのも好きです。コードは問題ないようですが、ファイルパスに同じ問題がありました。 file()に渡す前にその値を文字列に変換することで解決しました:

signingConfigs {
 debug {
    storeFile file(String.valueOf(System.getenv("KEYSTORE")))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }

お役に立てれば。

21
FMontano

ソースフォルダーにgradle.propertiesファイルを作成し(build.gradleとともに)、現在のプロジェクトにのみ適用するか、~/.gradle/gradle.propertiesに作成して、システム全体にコンテンツを適用します。

keystore=/home/myname/keystore/mykey
keystore_password=mypass
key_alias=mykey
key_password=keypass

Build.gradleファイルを次のように更新します。

debug {
  storeFile file("${keystore}")
  storePassword "${keystore_password}"
  keyAlias "${key_alias}"
  keyPassword "${key_password}"
}

オプションで、-Pオプションを使用してコマンドラインからパラメーターを渡すことができます。たとえば、./gradlew assemble -Pkey_password=keypassです。

7
Kevin Brotcke