2017-03-09 12 views
0

GenyMotionのローカルホストIPアドレス(10.0.3.2)は、AndroidエミュレータのローカルホストIP(10.0.2.2)とは異なります。現在、私は私のソースファイルのいずれかでこれを持っている:Android Gradleビルドでデバッグに入るファイルを書き込むAPK

//val LOCALHOST = "10.0.2.2" // Android emulator 
val LOCALHOST = "10.0.3.2" // Genymotion 

と私はLinuxマシンとMacのボックスを切り替えると、最新のソースを取得するたびに、私は1つのコメントを解除し、再構築する前に他のコメントを持っています。

誰かがより良い解決策を考えることができない限り、私はアクセスできるようにAPKに含まれるファイルにホストOSに応じてこれらの値の1つを書き込むGradleタスクを持っていたいと思います私のAndroidアプリのランタイムからそれを実行し、Androidスタジオでビルドすると、そのタスクはassembleDebugより前に実行されます。

私はそれをリソースに入れておくとランタイム側でアクセスするのが簡単だと思いますが、Class.getResourceAsStream()でアクセスできるプレーンテキストファイルでさえも問題ありません。

リリースapkに含まれているかどうかは気にしませんが、デバッグ対象に入れることをお勧めします。

また、私のbuild/出力ディレクトリにファイルが生成され、バージョンコントロールには表示されないようにしたいと考えています。

どのようにすればいいですか?

答えて

2

ありgetNetworkInterfaces()を使用して、ローカルIPアドレスを見つけるようにも優れたソリューションがありますが、あなたはGradleのからいくつかの情報を渡す方法を尋ねたとして、あなたはBuildConfig.LOCALHOSTとしてアクセスすることができます

android { 
    productFlavors { 
     flavorGenymotion { 
      buildConfigField "String", "LOCALHOST", '"10.0.3.2"' 
     } 
     flavorEmulator { 
      buildConfigField "String", "LOCALHOST", '"10.0.2.2"' 
     } 
    } 
    ... 

+0

ありがとうございました!これはうまくいった。 – user3562927

関連する問題