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.CertificateException
yandroid.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.DEBUG
es 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 unboolean
valor que serátrue
para una compilación de depuración, de lofalse
contrario:fuente
Si desea verificar
APK
estáticamente, puede usarEsto genera
0
siAPK
no se puede depurar y1
si lo es.fuente
aapt
vive aquí/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Quizás tarde, pero iosched usa
BuildConfig.DEBUG
fuente
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