2017-03-09 74 views
0

GenyMotion的本地主機IP地址(10.0.3.2)與Android模擬器的本地主機IP(10.0.2.2)不同。目前我有這個在我的源文件之一:如何讓Android Gradle build編寫進入調試的文件APK

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

,每當我在Linux中,並在Mac箱之間進行切換,並獲取最新的來源,我不得不取消註釋一個和重建之前發表意見等。

除非有人能想到更好的解決方案,我希望有一個Gradle任務,根據主機操作系統將這些值中的一個值寫入包含在APK中的文件,以便我可以訪問它來自我的Android應用程序的運行時,並且當我在Android Studio中構建時,該任務在assembleDebug之前運行。

我想把它放在資源中是最容易在運行時訪問的,但即使是Class.getResourceAsStream()可訪問的純文本文件也沒問題。

我不介意它是否包含在發行版apk中,但我更喜歡它只是進入調試版。

我還希望在我的build/輸出目錄中生成該文件,以便它對版本控制不可見。

任何想法如何去做這件事?

回答

2

有喜歡尋找使用getNetworkInterfaces()本地IP地址更好的解決方案,但是當你問到如何從gradle這個傳遞一些信息,

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

,您可以爲BuildConfig.LOCALHOST訪問。

+0

謝謝!這很好。 – user3562927