Câu trả lời:
Giải pháp đơn giản và lâu dài nhất là sử dụng BuildConfig.DEBUG
. Đây là một boolean
giá trị sẽ true
dành cho bản dựng gỡ lỗi, false
nếu không:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Đã có báo cáo rằng giá trị này không đáng tin cậy 100% từ các bản dựng dựa trên Eclipse, mặc dù cá nhân tôi không gặp phải vấn đề nào, vì vậy tôi không thể nói nó thực sự là bao nhiêu vấn đề.
Nếu bạn đang sử dụng Android Studio hoặc nếu bạn đang sử dụng Gradle từ dòng lệnh, bạn có thể thêm nội dung của riêng mình vào BuildConfig
hoặc chỉnh sửa các loại debug
và release
xây dựng để giúp phân biệt các tình huống này khi chạy.
Giải pháp từ Đối số bất hợp pháp dựa trên giá trị của android:debuggable
cờ trong tệp kê khai. Nếu đó là cách bạn muốn phân biệt bản dựng "gỡ lỗi" với bản dựng "phát hành", thì theo định nghĩa, đó là giải pháp tốt nhất. Tuy nhiên, hãy nhớ rằng về phía trước, debuggable
cờ thực sự là một khái niệm độc lập với những gì Gradle / Android Studio coi là bản dựng "gỡ lỗi". Bất kỳ loại bản dựng nào cũng có thể chọn đặt debuggable
cờ thành bất kỳ giá trị nào có ý nghĩa đối với nhà phát triển đó và cho loại bản dựng đó.
public static final boolean DEBUG = Boolean.parseBoolean("true");
bản dựng gỡ lỗi. Trong khi đó là một cách kỳ lạ để thiết lập DEBUG
để true
, cần làm việc. Nếu bạn thấy điều này trong một trong các bản phát hành thử nghiệm 1.3.0 hoặc nếu bạn có trường hợp kiểm tra có thể lặp lại cho 1.2.2, vui lòng gửi một vấn đề . Tôi không thấy bất kỳ vấn đề nổi bật nào báo cáo vấn đề này.
Hãy thử như sau:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
Nó được lấy từ các gói bài từ đây
getApplicationInfo().flags
để làm việc?
Có, bạn sẽ không gặp vấn đề gì khi sử dụng:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
Trừ khi bạn đang nhập sai lớp BuildConfig. Hãy chắc chắn rằng bạn đang tham khảo lớp BuildConfig của dự án của bạn, không phải từ bất kỳ thư viện phụ thuộc nào của bạn.
Do các ý kiến trái chiều về BuildConfig.DEBUG
, tôi đã sử dụng cách sau để vô hiệu hóa crashlytics (và phân tích) trong chế độ gỡ lỗi:
cập nhật /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'
}
}
}
sau đó, trong mã của bạn, bạn phát hiện ENABLE_CRASHLYTICS
cờ như sau:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
sử dụng khái niệm tương tự trong ứng dụng của bạn và đổi tên ENABLE_CRASHLYTICS
thành bất cứ điều gì bạn muốn. Tôi thích cách tiếp cận này vì tôi có thể thấy cờ trong cấu hình và tôi có thể điều khiển cờ.
Ngoài ra, bạn có thể phân biệt bằng BuildConfig.BUILD_TYPE;
Nếu bạn đang chạy bản dựng gỡ lỗi
BuildConfig.BUILD_TYPE.equals("debug");
trả về đúng. Và cho phát hành xây dựng BuildConfig.BUILD_TYPE.equals("release");
trả về đúng sự thật.
true
.
Tôi đang sử dụng giải pháp này trong trường hợp để biết rằng ứng dụng của tôi đang chạy trên phiên bản gỡ lỗi.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
trong một mô-đun lớp phụ thuộc (dĩ nhiên) KHÔNG CÓ GIỚI THIỆU đối với tệp build.gradle của ứng dụng - điều này khiến chế độ gỡ lỗi bị nhận ra sai cách. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
CỐ ĐỊNH vấn đề. Cảm ơn
Đảm bảo rằng bạn đang nhập đúng lớp BuildConfig Và vâng, bạn sẽ không gặp vấn đề gì khi sử dụng:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
nằm trong gói phần mềm ứng dụng của bạn, ví dụ:import com.mycompany.myapp.BuildConfig;