Yanıtlar:
En basit ve en iyi uzun vadeli çözüm kullanmaktır BuildConfig.DEBUG
. Bu, hata ayıklama derlemesi için kullanılacak bir boolean
değerdir true
, false
aksi takdirde:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Kişisel olarak bir sorunla karşılaşmamamla birlikte, bu değerin Eclipse tabanlı yapılardan% 100 güvenilir olmadığına dair raporlar var, bu yüzden gerçekten bir sorunun ne kadar olduğunu söyleyemem.
Android Studio kullanıyorsanız veya komut satırından Gradle kullanıyorsanız, sen kendi eşyalarını ekleyebiliyorsanız BuildConfig
veya başka çimdik debug
ve release
yardımına inşa türlerini zamanında bu durumları ayırt eder.
Yasadışı Argüman'ın çözümü android:debuggable
, manifest'teki bayrağın değerine dayanmaktadır . Eğer bir "hata ayıklama" derlemesini bir "serbest bırakma" derlemesinden ayırmak istiyorsanız, tanım gereği, bu en iyi çözümdür. Ancak, ileriye dönük olarak, debuggable
bayrakın Gradle / Android Studio'nun "hata ayıklama" yapısını düşündüğü şeyden gerçekten bağımsız bir kavram olduğunu unutmayın. Herhangi bir derleme türü, debuggable
bayrağı geliştirici ve bu derleme türü için anlamlı olan herhangi bir değere ayarlamayı seçebilir .
public static final boolean DEBUG = Boolean.parseBoolean("true");
bir hata ayıklama derlemesi alıyorum . Bu sette için garip bir yol olsa DEBUG
için true
, bu çalışması gerekir. Bunu 1.3.0 test sürümlerinden birinde görüyorsanız veya 1.2.2 için tekrarlanabilir bir test durumunuz varsa, lütfen sorun bildirin . Bu sorunu bildiren önemli sorunlar görmüyorum.
Takip etmeyi dene:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
Buradan buradan posta postasından alınır
getApplicationInfo().flags
Çalışmak için ne ithal edilmesi gerekiyor?
Evet, kullanırken sorun yaşamayacaksınız:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
Yanlış BuildConfig sınıfını içe aktarmadığınız sürece. Bağımlılık kitaplıklarınızın hiçbirinden değil, projenizin BuildConfig sınıfına başvurduğunuzdan emin olun.
Hakkında karışık yorumlar nedeniyle BuildConfig.DEBUG
, hata ayıklama modunda kilitlenme (ve analitik) devre dışı bırakmak için aşağıdakileri kullandım:
update /app/build.gradle
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "your.awesome.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 100
versionName "1.0.0"
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'true'
}
buildTypes {
debug {
debuggable true
minifyEnabled false
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'false'
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
kodunuzda ENABLE_CRASHLYTICS
bayrağı aşağıdaki gibi tespit edersiniz :
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
uygulamanızda aynı kavramı kullanın ve ENABLE_CRASHLYTICS
istediğiniz herhangi bir adla yeniden adlandırın . Bu yaklaşımı seviyorum çünkü konfigürasyonda bayrağı görebiliyorum ve bayrağı kontrol edebiliyorum.
Alternatif olarak, BuildConfig.BUILD_TYPE kullanarak farklılaştırabilirsiniz;
Hata ayıklama derlemesi çalıştırıyorsanız BuildConfig.BUILD_TYPE.equals("debug");
true değerini
döndürür. Ve sürüm derlemesi için BuildConfig.BUILD_TYPE.equals("release");
true değerini döndürür.
true
.
Uygulamamın hata ayıklama sürümünde çalıştığını öğrenmek için bu çözümü kullanıyorum.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
Uygulamanın build.gradle dosyasına (tabii ki) HİÇBİR REFERENCE vardı bağımlı bir gradle modülünde kullanıyordum - bu hata ayıklama modunun yanlış bir şekilde tanınmasına neden oldu. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
Sorun DÜZELTİLDİ. Thanks
Doğru BuildConfig sınıfını içe aktardığınızdan emin olun Ve evet, aşağıdakileri kullanırken sorun yaşamayacaksınız:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
uygulamanızın paketinde yer alıyor, örneğinimport com.mycompany.myapp.BuildConfig;