相关疑难解决方法(0)

如何解析.apk包中的AndroidManifest.xml文件

此文件似乎是二进制XML格式.这种格式是什么以及如何以编程方式解析(与在SDK中使用aapt dump工具相反)?

此二进制格式未在此处的文档中讨论.

注意:我想从Android环境外部访问此信息,最好是从Java访问.

android android-manifest

169
推荐指数
11
解决办法
17万
查看次数

在Java中比较版本字符串的有效方法

可能重复:
你如何比较Java中的两个版本字符串?

我有2个字符串,其中包含版本信息,如下所示:

str1 = "1.2"
str2 = "1.1.2"
Run Code Online (Sandbox Code Playgroud)

现在,任何人都能告诉我在Java中字符串中比较这些版本的有效方法并返回0,如果它们相等,则为-1,如果str1 <str2则为1,如果str1> str2则为1.

java string compare

57
推荐指数
4
解决办法
5万
查看次数

如何获取 Android AAB 文件的 versionCode 和 versionName(标记)?

类似于获取 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
Run Code Online (Sandbox Code Playgroud)

我也尝试尝试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
Run Code Online (Sandbox Code Playgroud)

android android-manifest apk android-app-bundle

9
推荐指数
2
解决办法
2657
查看次数

Java使用未声明的名称空间解析xml

每次我们的新android应用发布时,我需要在我们的网站上更新应用信息。因此,我尝试通过AndroidManifest.xml上载到服务器时的apk中的来自动更新应用信息。

我使用AXMLResourcejdom2来获取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));
Run Code Online (Sandbox Code Playgroud)

但是我总是明白

与元素类型“清单”相关联的属性“ 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"
Run Code Online (Sandbox Code Playgroud)

当我检查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" …
Run Code Online (Sandbox Code Playgroud)

java xml android dom namespaces

8
推荐指数
1
解决办法
239
查看次数

如何以编程方式读取apk文件的内容?

我需要以编程方式阅读apk文件(包括AndroidManifest.xml)的内容。我知道有一些类似的工具apktooldex2jaraapt提取的apk的内容,但是,我需要做同样通过Android应用程序。顺便说一下,我的出发点是一个有效的apk文件路径

java android apk dex android-sdk-tools

5
推荐指数
1
解决办法
3883
查看次数

ADB命令从APK获取versionCode

是否有adb要在上运行的命令,该命令给.apk了我该apk文件中android:versionCode设置的AndroidManifest

基本上,我如何获得apkusing 的版本代码adb

android version adb android-manifest

2
推荐指数
1
解决办法
1742
查看次数