2011-11-07 5 views
2

현재 외부 서버와 상호 작용하는 Android 앱을 작성하고 있습니다.Android - dev 환경에 따라 여러 리소스 xml 파일이 있습니다.

개발하는 동안 Android는 테스트 서버 인스턴스에 연결하지만 애플리케이션은 프로덕션 서버에 연결해야합니다.

현재 서버의 URL은 xml 파일 중 하나 (res/values ​​/ strings.xml)에 <string name="server_url">XYZ.example.com</string>으로 저장됩니다.

지금 당장은 상황에 따라 로컬 컴퓨터의 xml 파일을 수정하고 있습니다.

이런 경우를 처리하는 관용적 인 방법은 무엇입니까?

답변

1

XML 파일은 거의 같습니다. 예를 들면 mapview api 키가 있습니다.

mapview 앱을 개발하려면 빌드 인증서를 기반으로하는 키가 필요합니다. 대부분의 사람들은 디버그 키로 빌드하고 테스트 한 다음 릴리스 키로 배포합니다. 각 빌드 키에 대해 다른 api 키를 요청해야합니다. 내 api 키를 내 리소스 파일에 모두 유지 한 다음 디버깅 할 때 필요없는 코드를 주석으로 처리합니다.

대안은 문자열 파일에 두 개의 문자열을 유지 한 다음 사용할 키를 선택하는 프로그래밍 방식을 사용하는 것입니다. AdMob은 이러한 유형의 접근 방식을 사용합니다. 즉, 테스트중인 경우 추가 요청에 테스트 장치를 추가합니다. 전 세계의 모든 사용자가 동일한 전화를 사용하여 테스트 추가 만 보길 원치 않으므로 테스트 대 릴리스 빌드의 확인을 위해 통화를 래핑해야합니다. xml 파일에 정의 된 정수 리소스 값으로 제어합니다. 이것은 C/C++ DEBUG 매크로와 유사하게 작동합니다. 리소스 값의 값으로 변경해야하지만 한 곳에서해야합니다. 또는 당신은 테스트 서버를 숨기기 위해 주석을 사용할 수 있습니다 : 예

String server = context.getString(R.string.realserver); 
server  = context.getString(R.string.testserver); //comment out this line prior to release 

를 내가 주석/주석 방법의 팬이 아닙니다 때문에 쉽게 잊지하려면 리소스에 액세스 할 때 여러 곳을 특히.

이 문제를 해결할 더 좋은 방법이 있다면 나도 흥미가있을 것입니다.

+0

또 다른 예는 http://stackoverflow.com/questions/1743683/distinguishing-development-mode-and-release-mode-environment-settings-on-android입니다. 여기서는 내장 플래그를 사용하지만 수정이 필요합니다 활성화/비활성화 할 매니페스트 파일의 이름입니다. – gnac

0

이것은 내가 gradle과 함께 android studio를 사용하는 경우 인내 연습으로 간주됩니다.

이 문서를보고 할 수 있습니다 : 유튜브 비디오 http://tulipemoutarde.be/2013/10/06/gradle-build-variants-for-your-android-project.html

도 가능 :이 또한 같은 앱이 다른 패키지 이름을 가질 수 있습니다 https://www.youtube.com/watch?v=7JDEK4wkN5I

.

그것은 사용자가 찾고있는 것을 정확하게 달성하기 위해 gradle 풍미를 사용하며 구현하기가 쉽습니다.

관련 문제