Como posso obter programaticamente o código da versão ou o nome da versão do meu apk no arquivo AndroidManifest.xml após o download e sem a instalação.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xx.xxx"
android:versionCode="1"
android:versionName="1.1" >
Por exemplo, quero verificar se uma nova versão é carregada no meu serviço IIS, depois de instalar no dispositivo, se não é uma nova versão, não quero instalá-la.
android
android-manifest
apk
Big.Child
fonte
fonte
./aapt d badging release.apk | grep -Po "(?<=\sversion(Code|Name)=')([0-9.]+)"
2.6M
espaço em disco, você também pode escrever um analisador para analisar o arquivo apk com oAXMLResource
qual apenas custará52k
. Consulte Java parse XML com namespace não declaradoRespostas:
A seguir, trabalhou para mim na linha de comando:
NOTA: aapt.exe é encontrado em uma
build-tools
subpasta do SDK. Por exemplo:fonte
aapt
está em build-tools / XX no sdk.~/Library/Developer/Xamarin/android-sdk-macosx/build-tools/{version}
platformBuildVersionName
que é impresso quando uso esse comando e por que está vazio?aapt dump badging %1 pause
para arrastar n soltar qualquer apkfonte
apk
conteúdo sem instalar o aplicativo? @PatrickChoSe você estiver usando a versão 2.2 e superior do Android Studio , no Android Studio use Build → Analyze APKe selecione o arquivo AndroidManifest.xml.
fonte
programmatically
Isso responde à pergunta retornando apenas o número da versão como resultado. Contudo......
O objetivo, conforme indicado anteriormente, deve ser descobrir se o apk no servidor é mais recente que o instalado ANTES de tentar baixá-lo ou instalá-lo. A maneira mais fácil de fazer isso é incluir o número da versão no nome do arquivo do apk hospedado no servidor, por exemplo
myapp_1.01.apk
Você precisará estabelecer o nome e o número da versão dos aplicativos já instalados (se estiverem instalados) para fazer a comparação. Você precisará de um dispositivo raiz ou de um meio de instalação do aapt binary and busybox se eles ainda não estiverem incluídos na ROM.
Esse script obterá a lista de aplicativos do seu servidor e será comparada com os aplicativos instalados. O resultado é uma lista sinalizada para atualização / instalação.
Como alguém perguntou como fazer isso sem usar o aapt. Também é possível extrair informações de apk com apktool e um pouco de script. Dessa forma, é mais lento e não é simples no Android, mas funcionará no Windows / Mac ou Linux, desde que você tenha a instalação do apktool em funcionamento.
Considere também uma pasta suspensa no seu servidor. Carregue apks para ele e uma tarefa cron renomeia e os move para sua pasta de atualização.
fonte
No momento, isso pode ser feito da seguinte maneira
Em geral, será:
fonte
Agora, posso recuperar com êxito a versão de um arquivo APK de seus dados XML binários.
Neste tópico, obtive a chave da minha resposta (também adicionei minha versão do código do Ribo): Como analisar o arquivo AndroidManifest.xml dentro de um pacote .apk
Além disso, aqui está o código de análise XML que escrevi, especificamente para buscar a versão:
Análise XML
Comparação de versões (vista como SystemPackageTools.compareVersions no snippet anterior) NOTA: Este código foi inspirado no seguinte tópico: Maneira eficiente de comparar seqüências de caracteres de versão em Java
Eu espero que isso ajude.
fonte
Para o cenário de atualização, especificamente, uma abordagem alternativa pode ser ter um serviço da web que forneça o número da versão atual e verificar isso em vez de fazer o download do apk inteiro apenas para verificar sua versão. Isso pouparia largura de banda, seria um pouco mais eficiente (muito mais rápido para baixar do que um apk, se o apk inteiro não for necessário na maioria das vezes) e muito mais simples de implementar.
Da forma mais simples, você pode ter um arquivo de texto simples no seu servidor ...
http://some-place.com/current-app-version.txt
Dentro desse arquivo de texto tem algo como
baixe esse arquivo e verifique a versão atualmente instalada.
Construir uma solução mais avançada para isso seria implementar um serviço da Web adequado e ter uma chamada de API no lançamento, o que poderia retornar algum json, ou seja
http://api.some-place.com/versionCheck
:fonte
fonte