Android에서 개발 모드 및 릴리스 모드 환경 설정 구별
저는 Android 애플리케이션을 구축 중이며 개발 모드인지 릴리스 모드인지에 따라 조정할 수있는 몇 가지 환경 변수를 유지하고 싶습니다. 예를 들어 웹 서비스를 호출해야하는데 두 모드에서 URL이 약간 다릅니다. 이 설정 및 기타 설정을 외부화하여 대상 배포에 따라 쉽게 변경할 수 있도록하고 싶습니다.
이러한 요구를 지원하기위한 모범 사례 나 SDK에 어떤 것이 있습니까?
이 stackoverflow 게시물 에 따르면 SDK 도구 버전 17 (이 글을 쓰는 시점에서 19에 있음) BuildConfig.DEBUG
에서 개발 빌드를 빌드 할 때 참인 상수를 추가합니다 .
다음 솔루션은 매니페스트 파일에서 android:debuggable=true
개발 중 및 android:debuggable=false
애플리케이션 출시를 위해 항상 설정했다고 가정합니다 .
이제 ApplicationInfo.FLAG_DEBUGGABLE
에서 ApplicationInfo
얻은 플래그를 확인하여 코드에서이 속성의 값을 확인할 수 있습니다 PackageManager
.
다음 코드 스 니펫이 도움이 될 수 있습니다.
PackageInfo packageInfo = ... // get package info for your context
int flags = packageInfo.applicationInfo.flags;
if ((flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
// development mode
} else {
// release mode
}
@ viktor-bresan 유용한 솔루션에 감사드립니다. 현재 애플리케이션의 컨텍스트를 검색하는 일반적인 방법을 포함하여 완전히 작동하는 예제로 만들면 더 유용 할 것입니다. 아래 내용은 다음과 같습니다.
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
Android build.gradle에는 디버그 및 릴리스 환경 처리가 잘 있습니다.
build.gradle
파일에 다음 코드 스 니펫 추가
buildTypes {
debug {
buildConfigField "Boolean", "IS_DEBUG_MODE", 'true'
}
release {
buildConfigField "Boolean", "IS_DEBUG_MODE", 'false'
}
}
이제 아래와 같이 변수에 액세스 할 수 있습니다.
if (BuildConfig.IS_DEBUG_MODE) { {
//Debug mode.
} else {
//Release mode
}
isDebuggerConnected를 확인합니다 .
아래 코드와 같은 것은 어떻습니까?
public void onCreate Bundle b ) {
super.onCreate(savedInstanceState);
if ( signedWithDebugKey(this,this.getClass()) ) {
blah blah blah
}
blah
blah
blah
}
static final String DEBUGKEY =
"get the debug key from logcat after calling the function below once from the emulator";
public static boolean signedWithDebugKey(Context context, Class<?> cls)
{
boolean result = false;
try {
ComponentName comp = new ComponentName(context, cls);
PackageInfo pinfo = context.getPackageManager().getPackageInfo(comp.getPackageName(),PackageManager.GET_SIGNATURES);
Signature sigs[] = pinfo.signatures;
for ( int i = 0; i < sigs.length;i++)
Log.d(TAG,sigs[i].toCharsString());
if (DEBUGKEY.equals(sigs[0].toCharsString())) {
result = true;
Log.d(TAG,"package has been signed with the debug key");
} else {
Log.d(TAG,"package signed with a key other than the debug key");
}
} catch (android.content.pm.PackageManager.NameNotFoundException e) {
return false;
}
return result;
}
나는 오늘 우연히 정말 간단 해 보이는 또 다른 접근 방식을 발견했습니다 .. Build.TAGS를보세요. 앱이 개발 용으로 생성 될 때 이것은 String "test-keys"로 평가됩니다.
문자열 비교보다 훨씬 쉬워지지 않습니다.
또한 Build.MODEL 및 Build.PRODUCT는 에뮬레이터에서 "google_sdk"문자열로 평가됩니다!
내가 사용하는 방법은 다음과 같습니다.
http://whereblogger.klaki.net/2009/10/choosing-android-maps-api-key-at-run.html
디버그 로깅과지도 API 키를 전환하는 데 사용합니다.
'programing' 카테고리의 다른 글
C 및 C ++에서 표 형식 문자를 이스케이프해야합니까? (0) | 2021.01.14 |
---|---|
Firefox에서 Blob createObjectURL 다운로드가 작동하지 않음 (그러나 디버깅 할 때 작동 함) (0) | 2021.01.14 |
HTML 텍스트 입력에서 텍스트를 선택할 때 강조 색상 변경 (0) | 2021.01.14 |
mysql_escape_string VS mysql_real_escape_string (0) | 2021.01.14 |
GUI 다운로더없이 NLTK 말뭉치 / 모델을 프로그래밍 방식으로 설치 하시겠습니까? (0) | 2021.01.14 |