Насколько я знаю, в android "release build" подписан APK. Как это проверить по коду или у Eclipse есть какие-то секретные определения?
Мне это нужно для отладки заполнения элементов ListView из данных веб-службы (нет, logcat не вариант).
Мои мысли:
- Приложения
android:debuggable
, но по какой-то причине это не выглядит надежным. - Идентификатор устройства с жестким кодированием - не лучшая идея, потому что я использую то же устройство для тестирования подписанных APK.
- Используете ручной флаг где-нибудь в коде? Правдоподобно, но когда-нибудь обязательно забудут что-то изменить, плюс все программисты ленивы.
android
debugging
certificate
Im0rtality
источник
источник
Ответы:
Есть другой способ проверить, создано ли приложение с помощью сертификата отладки или выпуска, но мне больше всего кажется, что это следующий способ.
Согласно информации в документации Android « Подписание вашего приложения» , ключ отладки содержит следующее отличительное имя субъекта: « CN = Android Debug, O = Android, C = US ». Мы можем использовать эту информацию, чтобы проверить, подписан ли пакет с помощью отладочного ключа без жесткого кодирования подписи отладочного ключа в нашем коде.
Дано:
Вы можете реализовать метод isDebuggable следующим образом:
источник
java.security.cert.X509Certificate
,java.security.cert.CertificateException
иandroid.content.pm.Signature
. Все остальные классы не представляют для меня несколько матчей,Чтобы проверить флаг отлаживаемости, вы можете использовать этот код:
Котлин:
Дополнительную информацию см. В разделе « Защита приложений Android LVL» .
В качестве альтернативы, если вы правильно используете Gradle, вы можете проверить,
BuildConfig.DEBUG
истинно оно или ложно.источник
Отвечает Марк Мерфи
Самым простым и лучшим долгосрочным решением является использование
BuildConfig.DEBUG
. Этоboolean
значение будетtrue
для отладочной сборки, вfalse
противном случае:источник
Если вы хотите проверить
APK
статически, вы можете использоватьЭто выводит,
0
еслиAPK
не удается отладить, и1
если это так.источник
aapt
живет здесь/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Может поздно, но iosched использует
BuildConfig.DEBUG
источник
Сначала добавьте это в свой файл build.gradle, это также позволит параллельно запускать сборки отладки и выпуска:
Добавьте этот метод:
источник
Отладочная сборка также подписывается, только с другим ключом. Он автоматически генерируется Eclipse, и его сертификат действителен только в течение одного года. В чем проблема
android:debuggable
? Вы можете получить это значение из кода, используяPackageManager
.источник
Еще один вариант, о котором стоит упомянуть. Если вам нужно выполнить какой-то код только при подключенном отладчике, используйте этот код:
источник
Решено с помощью
android:debuggable
. Это была ошибка при чтении элемента, когда в некоторых случаях флаг отладки для элемента не сохранялся в записи, котораяif (m.debug && !App.isDebuggable(getContext()))
всегда оцениваласьfalse
. Виноват.источник
Решение на Kotlin, которое я использую сейчас:
таким образом я все еще могу ПОДПИСАТЬСЯ при отладке, и о них будет сообщено в Crashlytics (например, для процесса QA)
источник