unknown文件如何产生
- 我们来使用apktool d 命令,可以看到I: Copying unknown files...日志打印,这个表示apktool正在拷贝unknown文件
G:\workspace\apktool>apktool d dc.apk I: Using Apktool 2.4.1 on dc.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Baksmaling classes2.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files...
- 我们可以看到反编译产物的目录里面有个unknown的文件夹,里面放了一些文件或目录
- 我们再打开apktool.yml,在文件的最下面可以看到一个unknownFiles字段,其后配置的就是unknown文件夹下的所有文件的路径,后面跟上": '0'",或者": '8'",这里面的配置很重要,决定了后面apk重新构建时unknown目录下的文件能否打进去,如果不配置apktool进行回编译的时候回丢弃掉没有配置的文件
- apktool官方文档对
unknownFiles有个说明:unknownFiles
- Used to record name/location of non-standard files in an apk in order to place correctly on rebuilt apk(用于记录 apk 中非标准文件的名称/位置,以便正确放置在重建的 apk 上 ) - 当我们对uunknown文件有了初步的认识后,在我们进行逆向开发的时候,就能解决有些莫名其妙的问题,下面我举个现实中遇到例子吧
AppFlyer aar包合并问题
- 最开始我们接入的AppsFlyer的版本都是5.0以下,在进行打包合并代码的时候都没有什么问题,后来AppsFlyer要求升级到5.0版本以上,本来以为升级了SDK应该没啥问题,但是自从升级后,市场那边就反馈AF后台没有数据,我们这边查了好久都没查到问题,只有先回退到5.0以下的版本出包了,然后想AF的技术人员发了一个工单,帮我们定位下问题,他们反馈缺失了两个资源文件
- 然后我们顺着AF技术反馈的,去他们的aar包中查看,果然还真的有这么两个文件,但是为啥我们的打包工具将这两个文件吃掉了呢,原来这两个文件是保存在classes.jar中的,打包工具在将classes.jar转成dex文件,再转smali文件的时候是没有提取这个两个文件的,而且现有的工具也处理不了
- 我们直接把aar进行解压,然后再解压classes.jar文件,可以看到里面的a-和b-文件
- 其实有了这两个文件还是没法正确的合并到母包中去,前面我们说了需要配置apktool.yml中的unknownFiles字段,里面需要加上这两个文件在unknown文件下路径,而且后面还要配置": '0'",或者": '8'",但是这个我们这没法确定该配置0还是8的
- 还好我们有其他手段去获取这两个文件该配哪个数字,我们新建一个空的android工程,不要引入任何三方库,只引入AF的库,然后出个apk,将这个apk使用apktool进行反编译,反编译后的产物里面果然看到了unknown文件夹和apktool.yml文件
- 然后可以看到看apktool.yml里面的unknownFiles下a-,b-配置的后缀两个都是0
- 然后我们原封不动的将 com/appsflyer/internal/a-: '0'和com/appsflyer/internal/b-: '0' 拷贝到母包的apktool.yml中,并将unknown目录下的文件拷贝到母包的unknown目录下,然后再将其他文件合并到母包中去,重新走出包流程,再进行测试,后面这个AppsFyler后台的数据终于正常了。
- 其实还有很多第三方库,我们在做合并的时候是没有注意到这个问题的,这个得靠经验去整了,当第一次遇到,还真不好找问题出现在哪里,所以这里记录下这个问题,分享给大家,当你们遇到的时候可能有些帮助。