Duas maneiras de avaliar se um aplicativo Android está no modo de depuração
Às vezes, queremos julgar se o aplicativo é uma versão de depuração no código, para proteger ou fazer algum processamento especial, por exemplo, 1. Imprima o log; 2. Se for a informação de travamento no modo de depuração, precisamos marcá-lo, etc.
Então, como julgar o modo de depuração?
Use BuildConfig.DEBUG para avaliar
A maneira mais fácil:
BuildConfig.DEBUG
O uso de BuildConfig.DEBUG pode julgar facilmente se é um pacote Debug ou um pacote Release, para realizar o processamento lógico.
No entanto, quando nosso projeto é um SDK, esse método não é aceitável. O BuildConfig.DEBUG em nosso SDK liberado é um pacote de lançamento e BuildConfig.DEBUG é sempre falso.
Então, como julgar se o pacote onde o SDK está localizado é Debug?
Use android:debuggable para julgar
Podemos usar android:debuggable para determinar se o aplicativo está em um estado depurável e seu sinalizador correspondente é ApplicationInfo.FLAG_DEBUGGABLE:
if (0 != (getContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)){
//Debug 模式是打开状态
}
Ele pode ser definido em build.gradle:
debug {
debuggable true
}
diferença entre os dois
BuildConfig.DEBUG
BuildConfig.DEBUG indica se o APP atualmente compilado é um pacote de depuração, que é gerado e definido automaticamente pelo compilador.
android:depurável
android:debuggable indica se o aplicativo pode ser depurado (mesmo quando executado em um dispositivo de modo de usuário). Defina como "true" se a depuração for possível, caso contrário, defina como "false". O valor padrão é falso".
A tag android:debuggable será eventualmente definida na tag do aplicativo no AndroidManifest:
<application android:debuggable=["true" | "false"]
. . .
Representa o estado ajustável do APP.
ligação entre os dois
BuildConfig.DEBUG está relacionado a android:debuggable: se você definir android:debuggable como false, BuildConfig.DEBUG sempre será false, independentemente de o APP ser um pacote de depuração ou não.
configurar:
debug {
debuggable true
}
Depois disso, o valor de BuildConfig.DEBUG é sempre false.