web-dev-qa-db-ja.com

Android gradle build System.getEnv( "RELEASE_PASSWORD")はnullを返します

System.getenv()が環境変数にnullを返すという問題があります。私のパスワードはRELEASE_PASSWORD環境変数に保存されています。私がする時:

$ echo $RELEASE_PASSWORD

正しい値が出力されるので、変数が設定されていることがわかります。

私は元々signingConfig signingConfigs.releaserelease buildTypeですべて正常に機能していましたが、製品のフレーバーごとに異なる署名設定が必要です。パスワードをハードコーディングすると、想定どおりに機能します。環境変数からパスワードを読み取ろうとすると、物事が不安定になります。

何らかのスコープの問題ですか?

これは私のbuild.gradle

Android {

  ...

  signingConfigs {
    release {
      storeFile ...;
      keyAlias ...;
      storePassword System.getenv("RELEASE_PASSWORD");
      keyPassword System.getenv("RELEASE_PASSWORD");
    }

    unsigned {
      keyAlias "";
      storePassword "";
      keyPassword "";
    }
  }

  buildTypes {
    debug {
      versionNameSuffix = "-DEBUG"
    }

    release {
    }
  }

  flavorGroups "storeFront"

  productFlavors {
    def googleVariable = signingConfigs.release
    def amazonVariable = signingConfigs.unsigned

    google {
        flavorGroup "storeFront"
        signingConfig googleVariable
    }

    Amazon {
        flavorGroup "storeFront"
        signingConfig amazonVariable
    }
  }
}
28
HMCFletch

Android Studioは環境変数をGradleに渡さないため、実行しようとしていることはIDEからは機能しません。ビルドファイルにキーストアパスワードを保持しないようにする方法が必要な場合は、別のファイルにパスワードを保存するためのコードを含む回答を次に示します。

build.gradleにキーストア情報を入れずにAPKに署名

13
Scott Barta

Windowsユーザーの場合、新しい環境変数を作成すると、PCを再起動する必要があります。 Windowsの何が問題なのかはわかりませんが、それがWindowsでの動作方法です。私が試したのは、私のgradleスクリプトで、Java_HOME変数パスを次のように出力するタスクを記述しました:

task printJavaHome{
     println System.getenv("Java_HOME") 
}

そしてgradleと同期します。

次に、スタジオでターミナルウィンドウを開きます。

そしてタイプ:

gradlew -q printJavaHome

これにより、Java設定した場合はホームパスが表示されます。それ以外の場合は、nullと表示されます。

上記のコマンドを実行する前に、ターミナルがプロジェクトのルートディレクトリを指していることを確認してください。

次に、新しい環境変数を設定してロードし、上記の手順で印刷してみます。 Windowsを使用している場合はnullが表示されます。しかし、いつPCを再起動してコマンドを再度実行すると、環境変数の実際の値が返されます。

それは私が経験し、共有することを考えたものであり、誰かに役立つかもしれません。

15
TheLittleNaruto

コマンドラインからAndroid Studioを実行して、環境変数をIDEに渡すことができます。MacOSでは、/Applications/Android\ Studio.app/Contents/MacOS/studioを実行してターミナルから実行できます。

14
Xavi Rigau

私(Windowsを使用)はrestart Android Studioで十分でした。

1
Tobias

新しく変更または追加された環境変数を認識するには、Androidスタジオを閉じて再起動する必要があります。

何らかの理由で、「キャッシュを無効にして再起動する」操作が新しい環境変数を取得するとは思わない。私はそれを数回行ったことがあり、その操作を行うことで新しい値を得たとは思いません。それは私には信じがたいように聞こえるので、たぶん私はいくつかのタイプミスを抱えていて、私が観察したもので混乱しています。しかし、スペルが明らかな原因であるため、スペルを何度もチェックしました。変更を加えずに、Android studioを完全に閉じると、無効化キャッシュを実行して操作を再開するのではなく、環境変数の読み取りに関する問題がなくなりました。無効化キャッシュを実行した理由と再起動操作は、Android Studioセッションをいくつか実行していて、それらをすべて閉じてすべてを再起動する簡単な方法のように思われるためです。

0
Tom Rutchik