2017-03-09 7 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 

을하고 나는 리눅스와 Mac 상자 사이를 전환하고 최신 버전의 소스를 가져올 때마다, 나는 하나의 주석을 해제하고 다시 작성하기 전에 다른 의견을 가지고 : 현재 내 소스 파일 중 하나이 있습니다.

누군가가 더 나은 해결책을 생각할 수없는 경우 호스트 OS에 따라 이러한 값 중 하나를 APK에 포함 된 파일에 기록하여 액세스 할 수있는 Gradle 작업을하고 싶습니다. 그것은 내 안드로이드 애플 리케이션의 런타임에서, 그리고 assembleDebug 전에 안드로이드 스튜디오에서 빌드 작업을 실행해야합니다.

리소스에 넣으면 런타임에 액세스하는 것이 가장 쉽지만 Class.getResourceAsStream()에 액세스 할 수있는 일반 텍스트 파일도 괜찮습니다.

릴리스 apk에 포함되어 있어도 상관 없지만 디버그에 포함되는 것이 좋습니다.

파일을 내 build/ 출력 디렉토리에 생성하여 버전 제어가 보이지 않도록하는 것이 좋습니다.

어떻게해야할까요? 당신이 BuildConfig.LOCALHOST으로 액세스 할 수 있습니다

답변

2

getNetworkInterfaces()를 사용하여 로컬 IP 주소를 찾는 등 더 나은 솔루션은,하지만 당신은 질문으로 어떻게 Gradle을 일부 정보를 전달하는 데,

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

.

+0

고맙습니다! 이것은 훌륭하게 작동했습니다. – user3562927