Autant que je sache, dans Android "release build" est signé APK. Comment le vérifier à partir du code ou Eclipse a-t-il une sorte de définition secrète?
J'en ai besoin pour déboguer le remplissage des éléments ListView à partir des données du service Web (non, logcat pas une option).
Mes pensées:
- Application
android:debuggable
, mais pour une raison qui ne semble pas fiable. - Le codage en dur de l'identifiant d'appareil n'est pas une bonne idée, car j'utilise le même appareil pour tester les APK signés.
- Vous utilisez un indicateur manuel quelque part dans le code? Plausible, mais je vais certainement oublier de changer à un moment donné, et tous les programmeurs sont paresseux.
android
debugging
certificate
Im0rtalité
la source
la source
Réponses:
Il existe différentes manières de vérifier si l'application est construite à l'aide du débogage ou du certificat de version, mais la méthode suivante me semble la meilleure.
Selon les informations de la documentation Android Signing Your Application , la clé de débogage contient le nom distinctif du sujet suivant: " CN = Android Debug, O = Android, C = US ". Nous pouvons utiliser ces informations pour tester si le package est signé avec une clé de débogage sans codage en dur de la signature de clé de débogage dans notre code.
Donné:
Vous pouvez implémenter une méthode isDebuggable de cette façon:
la source
java.security.cert.X509Certificate
,java.security.cert.CertificateException
etandroid.content.pm.Signature
. Toutes les autres classes ne présentent pas plusieurs matchs pour moiPour vérifier l'indicateur déboguable, vous pouvez utiliser ce code:
Kotlin:
Pour plus d'informations, consultez Sécurisation des applications LVL Android .
Sinon, si vous utilisez correctement Gradle, vous pouvez vérifier si
BuildConfig.DEBUG
est vrai ou faux.la source
Répondue par Mark Murphy
La solution la plus simple et la meilleure à long terme consiste à utiliser
BuildConfig.DEBUG
. C'est uneboolean
valeur qui seratrue
pour une compilation de débogage,false
sinon:la source
Si vous souhaitez vérifier un
APK
statiquement, vous pouvez utiliserCela génère
0
si leAPK
n'est pas déboguable et1
s'il l'est.la source
aapt
vit ici/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Peut-être en retard, mais des utilisations iosched
BuildConfig.DEBUG
la source
Ajoutez d'abord ceci à votre fichier build.gradle, cela permettra également d'exécuter côte à côte les versions de débogage et de publication:
Ajoutez cette méthode:
la source
Une version de débogage est également signée, juste avec une clé différente. Il est généré automatiquement par Eclipse et son certificat n'est valable qu'un an. Quel est le problème
android:debuggable
? Vous pouvez obtenir cette valeur à partir du code en utilisantPackageManager
.la source
Une autre option, à mentionner. Si vous devez exécuter du code uniquement lorsque le débogueur est attaché, utilisez ce code:
la source
Résolu avec
android:debuggable
. C'était un bogue dans la lecture de l'élément où, dans certains cas, l'indicateur de débogage sur l'élément n'était pas stocké dans l'enregistrement,if (m.debug && !App.isDebuggable(getContext()))
toujours évaluéfalse
. Ma faute.la source
Solution dans Kotlin que j'utilise en ce moment:
de cette façon, je peux toujours SIGNER en débogage et ceux-ci seront signalés à Crashlytics (exemple, pour le processus d'assurance qualité)
la source