Kri*_*ofe 8 java xml android dom namespaces
每次我们的新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));
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"
http:versionCode="1425572340"
http:versionName="14.25.57"
Run Code Online (Sandbox Code Playgroud)
与元素类型“清单”相关联的属性“ http:versionCode”的前缀“ http”未绑定
对于 com.facebook.katana-225.0.0.47.118.apk
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
manifest:versionCode="158425934"
manifest:versionName="225.0.0.47.118"
Run Code Online (Sandbox Code Playgroud)
与元素类型“ manifest”相关联的属性“ manifest:versionCode”的前缀“ manifest”未绑定
因此,这里是在comman中使用非散列名称空间的命令AndroidManifest.xml
,但是我该如何处理呢?
从技术上讲,您的文件是格式正确的XML,但不是名称空间格式正确的XML。绝大多数现代XML工具只能处理(或生成)命名空间格式正确的XML。但是,如果你能找到一个XML解析器仍然处理没有命名空间,良好的XML,那么您可以在一些满足您的需求(例如,你可以替换的方式使用它来“修理”你的XML manifest:versionCode
的manifest-versionCode
)。
但是,与其以这种方式修复XML,不如首先创建一个名称空间格式良好的XML,这样会更好,因此您不必受工具选择的限制。
归档时间: |
|
查看次数: |
239 次 |
最近记录: |