此文件似乎是二进制XML格式.这种格式是什么以及如何以编程方式解析(与在SDK中使用aapt dump工具相反)?
此二进制格式未在此处的文档中讨论.
注意:我想从Android环境外部访问此信息,最好是从Java访问.
可能重复:
你如何比较Java中的两个版本字符串?
我有2个字符串,其中包含版本信息,如下所示:
str1 = "1.2"
str2 = "1.1.2"
现在,任何人都能告诉我在Java中字符串中比较这些版本的有效方法并返回0,如果它们相等,则为-1,如果str1 <str2则为1,如果str1> str2则为1.
类似于获取 Android .apk 文件 VersionName 或 VersionCode 而无需安装 apk,我想获取versionCode和/或versionName仅使用一个.aab文件。
我试过简单地使用经典答案.apk文件,但用我的.aab文件代替,但它没有用:
$ $ANDROID_HOME/sdk/build-tools/29.0.2/aapt dump badging my_aab.aab
ERROR: dump failed because no AndroidManifest.xml found
我也尝试尝试xmltree直接转储:
$ $ANDROID_HOME/sdk/build-tools/29.0.2/aapt dump xmltree my_aab.aab base/manifest/AndroidManifest.xml
W/ResourceType(39872): Bad XML block: header size 664 or total size 118110474 is larger than data size 35953
ERROR: Resource base/manifest/AndroidManifest.xml is corrupt
每次我们的新android应用发布时,我需要在我们的网站上更新应用信息。因此,我尝试通过AndroidManifest.xml上载到服务器时的apk中的来自动更新应用信息。
我使用AXMLResource和jdom2来获取AndroidManifest.xml并解析它。
final Namespace NS = Namespace.getNamespace("http://schemas.android.com/apk/res/android");
zipFile = new ZipFile(apkPath);
ZipEntry zipEntry = new ZipEntry("AndroidManifest.xml");
inputStream = zipFile.getInputStream(zipEntry);
AXMLResource axmlResource = new AXMLResource();
axmlResource.read(inputStream);
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(new ByteArrayInputStream(axmlResource.toXML().toString().getBytes("UTF-8")));
Element root = document.getRootElement();
System.out.println(root.getAttributeValue("versionCode",NS));
System.out.println(root.getAttributeValue("versionName",NS));
但是我总是明白
与元素类型“清单”相关联的属性“ data:versionCode”的前缀“ data”未绑定
我打印了AndroidManifest.xml,发现data名称空间未声明。
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    data:versionCode="344"
    data:versionName="3.2.8"
当我检查android studio文档时,发现使用声明的名称空间。
然后,我认为这可能是由我们的应用程序开发人员的违规行为引起的。
但是,当我进一步思考时,为什么AndroidManifest.xml可以发布具有未声明名称空间的应用程序,然后我下载了一些apk,例如facebook,youtube,centos,百度磁盘和支付宝,却发现只有centos不使用未声明名称空间。
对于 com.google.android.youtube.apk
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android" …我需要以编程方式阅读apk文件(包括AndroidManifest.xml)的内容。我知道有一些类似的工具apktool,dex2jar,aapt提取的apk的内容,但是,我需要做同样通过Android应用程序。顺便说一下,我的出发点是一个有效的apk文件路径。
是否有adb要在上运行的命令,该命令给.apk了我该apk文件中android:versionCode设置的AndroidManifest?
基本上,我如何获得apkusing 的版本代码adb?