ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Studio Analyze APK 一直显示 Parsing Manifest探因及解决

2022-02-02 12:32:08  阅读:276  来源: 互联网

标签:java zip Parsing apk 探因 android Manifest com Android


那我们就试一试吧。

➜ bin apkanalyzer -h apk file-size Corn-dev-debug.apk

46.9MB

➜ bin apkanalyzer apk summary Corn-dev-debug.apk

com.corn 10300 10.3.0.0

➜ bin apkanalyzer manifest print Corn-dev-debug.apk

<?xml version="1.0" encoding="utf-8"?>

<manifest

xmlns:android=“http://schemas.android.com/apk/res/android”

android:versionCode=“10300”

android:versionName=“10.3.0.0”

package=“com.mymoney”

platformBuildVersionCode=“27”

platformBuildVersionName=“8.1.0”>

<uses-sdk

android:minSdkVersion=“19”

android:targetSdkVersion=“26” />

<uses-permission

android:name=“android.permission.GET_ACCOUNTS”

android:maxSdkVersion=“22” />

说明直接分析Manifest文件都是没有问题的。

➜ bin apkanalyzer dex list Corn-dev-debug.apk

classes7.dex

classes6.dex

classes5.dex

classes4.dex

classes3.dex

classes2.dex

classes.dex

复制代码

➜ bin apkanalyzer resources configs --type drawable Corn-dev-debug.apk

anydpi-v21

anydpi-v26

default

watch-v20

v21

v23

ldpi-v4

mdpi-v4

ldrtl-mdpi-v17

hdpi-v4

ldrtl-hdpi-v17

xhdpi-v4

ldrtl-xhdpi-v17

xxhdpi-v4

ldrtl-xxhdpi-v17

xxxhdpi-v4

ldrtl-xxxhdpi-v17

➜ bin apkanalyzer files list Corn-dev-debug.apk

Exception in thread “main” java.util.zip.ZipError: invalid END header (bad central directory offset)

at com.sun.nio.zipfs.ZipFileSystem.zerror(ZipFileSystem.java:1605)

at com.sun.nio.zipfs.ZipFileSystem.initCEN(ZipFileSystem.java:1045)

at com.sun.nio.zipfs.ZipFileSystem.(ZipFileSystem.java:130)

at com.sun.nio.zipfs.ZipFileSystemProvider.newFileSystem(ZipFileSystemProvider.java:117)

at java.nio.file.FileSystems.newFileSystem(FileSystems.java:326)

at java.nio.file.FileSystems.newFileSystem(FileSystems.java:276)

at com.android.utils.FileUtils.createZipFilesystem(FileUtils.java:538)

at com.android.tools.apk.analyzer.Archives.openInnerZip(Archives.java:48)

at com.android.tools.apk.analyzer.ArchiveTreeStructure.create(ArchiveTreeStructure.java:100)

at com.android.tools.apk.analyzer.ArchiveTreeStructure.create(ArchiveTreeStructure.java:65)

at com.android.tools.apk.analyzer.ApkAnalyzerImpl.filesList(ApkAnalyzerImpl.java:803)

at com.android.tools.apk.analyzer.ApkAnalyzerCli$Action$6.execute(ApkAnalyzerCli.java:430)

at com.android.tools.apk.analyzer.ApkAnalyzerCli.run(ApkAnalyzerCli.java:163)

at com.android.tools.apk.analyzer.ApkAnalyzerCli.main(ApkAnalyzerCli.java:130)

终于,在用命令显示Apk内所有文件列表的时候出现了问题。并且有对应的调用栈信息抛出。

从调用栈中我们发现,命令行的调用方式,是通过ApkAnalyzerCli中的main方法去接收命令参数的。在ApkAnalyzer.jar同级的目录中,我们发现了有对应的ApkAnalyzerCli.jar,其作用,就是基于ApkAnalyzer.jar基础上封装的一个Client,以方便程序被外部调用执行,如通过命令行的方式等。

并且,突然间发现,此处的栈信息与之前GitHub上JetBrains/android项目中分析到的源码位置相同~!!

at com.android.tools.apk.analyzer.ArchiveTreeStructure.create(ArchiveTreeStructure.java:100)

看来,这就是真实的原因所在了。

2.6 项目查因

ArchiveTreeStructure主要作用是分析apk文件中的档案文件树形结构,且从最终抛出的错误信息可以看出:Apk包中zip文件出现的问题,zip文件头部信息无效。

java.util.zip.ZipError: invalid END header (bad central directory offset)

抓住这一关键点,那就好办了。直接搜索整个项目中的.zip文件,发现还真有不少。并且存在于assets目录下。主要存放的是一些资源。

直接解压缩.zip文件,发现有问题,果然,此处有问题的.zip文件导致apkanalyzer在分析Apk过程中,分析到这些.zip文件出现了问题。

.zip格式显然是不符合.zip规范的,那么,具体是什么问题呢?

查找到项目使用到这些文件的代码位置。

泪奔了,有木有?!

2.7 核验

到现在位置,整体逻辑已经很清晰了。项目中因为存在移除了表示zip格式的头字节的zip文件,导致在使用Android Studio Analyze APK分析Apk时,出现程序错误,从而只显示Parsing Manifest

究竟对不对呢,可以以简单方式核验下。

1,通过移除此类有问题的.zip文件,重新打包,发现可以使用Android Studio Analyze APK进行分析了,直接使用apkanalyzer命令行分析时,也木有问题。

2,使用二进制修改工具,将这类有问题的.zip文件对应的四个字节的头信息给补上。

此处推荐使用 Hex Friend 工具,可以直接以十六进制修改对应的二进制文件内容。

Hex Friend打开zip文件后,发现文件头字节中,确实不符合zip规范。zip文件头四个字节是固定的,504B0304,用来表示的是对应的zip格式。

于是,我们手动补上试试。保存后,发现.zip文件可以通过系统工具解压了。

替换后再次打包验证,发现可以Android Studio Analyze APK可以正常分析,apkanalyzer可以直接使用。

三、解决


项目中之所以此处将zip文件头四个字节去除存放,当时主要考虑是安全性问题。然后通过代码的形式在拷贝过程中,去补上对应的字节信息,相当于进行了修正。

现在既想不影响原有逻辑,同时又能愉快的使用Android Studio Analyze APK进行分析,怎么办呢?

通过分析,我们发现,apkanalyzer抛出的异常,是在对zip文件进行分析的时候出现的,那换一种思路,如果这类文件本身,不是zip文件格式,程序很可能就不会执行到zip文件的分析判断上,是不是就可以了呢?

说干就干,直接将项目中此类非规范化的zip文件格式替换,例如替换成一种自己随意想的格式,就叫.tfc吧,试试。

果然,再次打包,分析,OK,完全木有问题!

四、启示


其实从反面来想,如果我们不想别人通过apkanalyzer来分析我们的Apk,可以通过此类技巧,直接放一个不符合规范的zip文件在assets目录中。例如本文中的将zip文件头四个字节去除。

如果自己想分析自己的Apk,加对应的文件移除即可。这样在一定程度上,防防一些开发者,提高一下安全的门槛,还是可以的。

是不是有点,尬?

五、结语


apkanalyzer是Android开发过程中,用来分析Apk中很有用的一个工具,经常被用到。因为其集成在AS中后,足够简单轻便,且能一定程度上满足我们分析Apk的需要。

最后

答应大伙的备战金三银四,大厂面试真题来啦!

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
给文章留个小赞,就可以免费领取啦~

戳我领取:3000页Android开发者架构师核心知识笔记

《960全网最全Android开发笔记》

《379页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析

资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

-fAWkwUTN-1643775561775)]

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

[外链图片转存中…(img-FrcFiUy9-1643775561775)]

腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析

[外链图片转存中…(img-TOrarYhV-1643775561776)]

资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

标签:java,zip,Parsing,apk,探因,android,Manifest,com,Android
来源: https://blog.csdn.net/m0_66145060/article/details/122768741

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有