Por lo que yo sé, en Android "versión de compilación" está firmado APK. ¿Cómo verificarlo desde el código o Eclipse tiene algún tipo de definición secreta?
Necesito esto para depurar elementos de ListView de llenado de datos de servicios web (no, logcat no es una opción).
Mis pensamientos:
- Aplicación 
android:debuggable, pero por alguna razón no parece confiable. - Codificar el ID del dispositivo no es una buena idea, porque estoy usando el mismo dispositivo para probar APK firmados.
 - ¿Utiliza la bandera manual en algún lugar del código? Plausible, pero definitivamente me olvidaré de cambiar en algún momento, además de que todos los programadores son vagos.
 
                    
                        android
                                debugging
                                certificate
                                
                    
                    
                        Im0rtality
fuente
                
                fuente

Respuestas:
Hay diferentes formas de verificar si la aplicación se compila mediante depuración o certificado de liberación, pero la siguiente forma me parece la mejor.
De acuerdo con la información en la documentación de Android Firma de su aplicación , la clave de depuración contiene el siguiente nombre distinguido del sujeto: " CN = Android Debug, O = Android, C = US ". Podemos usar esta información para probar si el paquete está firmado con la clave de depuración sin codificar la firma de la clave de depuración en nuestro código.
Dado:
Puede implementar un método isDebuggable de esta manera:
fuente
java.security.cert.X509Certificate,java.security.cert.CertificateExceptionyandroid.content.pm.Signature. Todas las demás clases no presentan coincidencias múltiples para míPara verificar la bandera depurable, puede usar este código:
Kotlin:
Para obtener más información, consulte Protección de aplicaciones LVL de Android .
Alternativamente, si está usando Gradle correctamente, puede verificar si
BuildConfig.DEBUGes verdadero o falso.fuente
Respondido por Mark Murphy
La solución más simple y mejor a largo plazo es usar
BuildConfig.DEBUG. Este es unbooleanvalor que serátruepara una compilación de depuración, de lofalsecontrario:fuente
Si desea verificar
APKestáticamente, puede usarEsto genera
0siAPKno se puede depurar y1si lo es.fuente
aaptvive aquí/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aaptQuizás tarde, pero iosched usa
BuildConfig.DEBUGfuente
Primero agregue esto a su archivo build.gradle, esto también permitirá la ejecución en paralelo de versiones de depuración y liberación:
Agrega este método:
fuente
También se firma una compilación de depuración, solo que con una clave diferente. Eclipse lo genera automáticamente y su certificado es válido solo por un año. ¿Cuál es el problema
android:debuggable? Puede obtener este valor del código usandoPackageManager.fuente
Otra opción digna de mención. Si necesita ejecutar algún código solo cuando se adjunta el depurador, use este código:
fuente
Resuelto con
android:debuggable. Hubo un error en la lectura del elemento donde, en algunos casos, el indicador de depuración en el elemento no se almacenaba en el registro yif (m.debug && !App.isDebuggable(getContext()))siempre se evaluabafalse. Culpa mía.fuente
Solución en Kotlin que estoy usando en este momento:
de esa manera todavía puedo FIRMAR en la depuración y se informará a Crashlytics (por ejemplo, para el proceso de control de calidad)
fuente