Tanto quanto eu sei, no Android "release build" é assinado APK. Como verificá-lo a partir do código ou o Eclipse tem algum tipo de definição secreta?
Eu preciso disso para depurar o preenchimento de itens do ListView a partir de dados de serviço da web (não, logcat não é uma opção).
Meus pensamentos:
- Aplicativo
android:debuggable
, mas por algum motivo que não parece confiável. - O código do dispositivo de codificação não é uma boa ideia, porque estou usando o mesmo dispositivo para testar APKs assinados.
- Usando sinalizador manual em algum lugar no código? Plausível, mas com certeza vou esquecer de mudar em algum momento, além de todos os programadores serem preguiçosos.
android
debugging
certificate
Im0rtality
fonte
fonte
Respostas:
Há uma maneira diferente de verificar se o aplicativo é compilado usando o certificado de depuração ou liberação, mas a seguinte maneira me parece melhor.
De acordo com as informações na documentação do Android, Signing Your Application , a chave de depuração contém o seguinte nome distinto do assunto: " CN = Android Debug, O = Android, C = US ". Podemos usar essas informações para testar se o pacote está assinado com chave de depuração sem a assinatura da chave de depuração codificada em nosso código.
Dado:
Você pode implementar um método isDebuggable desta maneira:
fonte
java.security.cert.X509Certificate
,java.security.cert.CertificateException
eandroid.content.pm.Signature
. Todas as outras classes não apresentam várias correspondências para mimPara verificar o sinalizador depurável, você pode usar este código:
Kotlin:
Para mais informações, consulte Protegendo aplicativos Android LVL .
Como alternativa, se você estiver usando o Gradle corretamente, poderá verificar se
BuildConfig.DEBUG
é verdadeiro ou falso.fonte
Respondida por Mark Murphy
A solução mais simples e melhor a longo prazo é usar
BuildConfig.DEBUG
. Este é umboolean
valor que serátrue
para uma compilação de depuração,false
caso contrário:fonte
Se você deseja verificar
APK
estaticamente, pode usarIsso gera
0
seAPK
não for depurável e1
se for.fonte
aapt
vive aqui/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Talvez atrasado, mas o iosched usa
BuildConfig.DEBUG
fonte
Primeiro adicione isso ao seu arquivo build.gradle, isso também permitirá a execução lado a lado das versões de depuração e lançamento:
Adicione este método:
fonte
Uma compilação de depuração também é assinada, apenas com uma chave diferente. É gerado automaticamente pelo Eclipse e seu certificado é válido por apenas um ano. Qual é o problema
android:debuggable
? Você pode obter esse valor do código usandoPackageManager
.fonte
Outra opção, vale a pena mencionar. Se você precisar executar algum código apenas quando o depurador estiver conectado, use este código:
fonte
Resolvido com
android:debuggable
. Foi um erro na leitura do item, onde, em alguns casos, o sinalizador de depuração no item não estava sendo armazenado no registro, sendoif (m.debug && !App.isDebuggable(getContext()))
sempre avaliadofalse
. Foi mal.fonte
Solução em Kotlin que estou usando no momento:
Dessa forma, ainda posso ASSINAR na depuração e eles serão relatados ao Crashlytics (exemplo, para o processo de controle de qualidade)
fonte