Centos下android应用apk包,apktool反编译及回重新打包

apktool:是GOOGLE提供的APK编译工具,能够反编译及回编译apk,同时安装反编译系统apk所需要的framework-res框架,清理上次反编译文件夹等功能。
aapt:将资源文件编译成二进制文件.尽管你可能没有直接使用过aapt工具, 但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。
下载(下最新的):
https://code.google.com/p/android-apktool/
至于环境呢,当然是要可以执行java了,并且安装了gcc等编译工具等等,zlib必不可少哦

环境信息:
OS:Centos 环境
zlib:1.2.5+ (官网是1.2.8,你直接编译安装这个就可以了) http://www.zlib.net/
注意:记得把java、apktool、apktool.jar、aapt都加到环境变量内~已经在重新安装zlib后要执行ldconfig

相关工具我已经上传到百度网盘 下载 http://pan.baidu.com/share/link?shareid=1345746703&uk=1426502039

源码方式安装zlib:
下载:http://www.zlib.net/,或者到我百度网盘内下载
步骤:
#如果你系统是64位的,你还必须要单独编译一个32位的,因为aapt不支持64位,所以必须要先执行

[root@kinggoo.com zlib-1.2.8]# mkdir -p /usr/local/{zlib,zlib64}
[root@kinggoo.com zlib-1.2.8]# export CFLAGS=-m32
[root@kinggoo.com zlib-1.2.8]# ./configure --prefix=/usr/local/zlib && make && make install

注意还要在把64位的也编译了,不然恐怕你机器就起不来了,只能跟我一样去机房里面编译配置了。

[root@kinggoo.com zlib-1.2.8]# export CFLAGS=-m64
[root@kinggoo.com zlib-1.2.8]# ./configure --prefix=/usr/local/zlib64 && make && make install

不报错则OK

接着执行(如果你没有把)

没有编译64位的zlib导致的,或者说是我没有拷贝到对应的lib目录下导致的下面的问题
而如果在重启系统时,出现类似下面这种错误,是由于libz.so的问题,系统找不到了
Checking configuration files for slapd: bdb_db_open: unclean shutdown detected; attempting recovery.
bdb_db_open: Recovery skipped in read-only mode. Run manual recovery if errors are encountered.

[root@kinggoo.com zlib-1.2.8]# cp /usr/local/lib/libz.so.1.2.8 /lib/libz.so.1.2.8
[root@kinggoo.com zlib-1.2.8]# ln -sf /lib/libz.so.1.2.8 /lib/libz.so.1
[root@kinggoo.com zlib-1.2.8]# ln -sf /lib/libz.so.1.2.8 /lib/libz.so
[root@kinggoo.com zlib-1.2.8]# cp  /usr/local/zlib64//lib/libz.so.1.2.8 /lib64/
[root@kinggoo.com zlib-1.2.8]# ln -sf /lib64/libz.so.1.2.8 libz.so
[root@kinggoo.com zlib-1.2.8]# ln -sf /lib64/libz.so.1.2.8 libz.so.1
[root@kinggoo.com zlib-1.2.8]# cp  /usr/local/zlib/lib/libz.so.1.2.8 /usr/local/lib/
[root@kinggoo.com zlib-1.2.8]# cp  /usr/local/zlib64/lib/libz.so.1.2.8 /usr/local/lib64
[root@kinggoo.com zlib-1.2.8]# ln -sf /usr/local/lib/libz.so.1.2.8 /usr/local/lib/libz.so
[root@kinggoo.com zlib-1.2.8]# ln -sf /usr/local/lib/libz.so.1.2.8 /usr/local/lib/libz.so.1
[root@kinggoo.com zlib-1.2.8]# ln -sf /usr/local/lib64/libz.so.1.2.8 /usr/local/lib64/libz.so
[root@kinggoo.com zlib-1.2.8]# ln -sf /usr/local/lib64/libz.so.1.2.8 /usr/local/lib64/libz.so.1
[root@kinggoo.com zlib-1.2.8]# ldconfig
[root@kinggoo.com zlib-1.2.8]# updatedb

ok这时候几乎就不会有错误了。

拆解格式:

apktool d kinggoo.apk kinggoo

apktool有一些参数,主要看你是需要修改哪部分东西,大概一般都是直接就可以了

最后重新打包

apktool  b  kinggoo  kinggoo.com.apk
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs...
I: Building apk file...

最后运行没问题

啰嗦一下,如果你的包内使用了外部的一些类库等,可能在你重新编译后依然没办法正常运行软件内的一步分功能,这时你可以试试这个思路。当然这个程序必须是你自己的,可以得到原始的无签名的apk。
方法是,1)你将未签名包正常解压出来比如是A目录。
2)使用apktool反编译得到B目录
3)修改B目录内需要修改的数据
4)将B目录重新打包成apk,比如叫B.apk(是未签名的)
5)接着在解压重新打包后的B.apk成为BB文件夹文件
6)使用BB文件夹文件覆盖掉A目录文件夹

这时这个应该功能上来说是没什么问题了,除非在你代码里又引入一些其他的比较恶心的写法。

参考信息:

下面这个问题出现多半也是因为重新编译了zlib,而appt版本太老导致,请在google下载对应的aapt以及apktool等工具

/var/www/html/source/tmp/kinggoo/res/values/styles.xml:137: error: Error retrieving parent for item: No resource found that matches the given name '@*android:style/Theme.Dialog'.
/var/www/html/source/tmp/kinggoo/res/values/styles.xml:145: error: Error retrieving parent for item: No resource found that matches the given name '@*android:style/Theme.Dialog'.
/var/www/html/source/tmp/kinggoo/res/values/styles.xml:153: error: Error retrieving parent for item: No resource found that matches the given name '@*android:style/Theme.Dialog'.
/var/www/html/source/tmp/kinggoo/res/values/styles.xml:161: error: Error retrieving parent for item: No resource found that matches the given name '@*android:style/Theme.Dialog'.
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 4, --target-sdk-version, 4, -F, /tmp/APKTOOL8730309660863791006.tmp, -I, /root/apktool/framework/1.apk, -S, /var/www/html/source/tmp/kinggoo/res, -M, /var/www/html/source/tmp/kinggoo/AndroidManifest.xml]
        at brut.androlib.Androlib.buildResourcesFull(Androlib.java:358)
        at brut.androlib.Androlib.buildResources(Androlib.java:283)
        at brut.androlib.Androlib.build(Androlib.java:206)
        at brut.androlib.Androlib.build(Androlib.java:176)
        at brut.apktool.Main.cmdBuild(Main.java:228)
        at brut.apktool.Main.main(Main.java:79)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 4, --target-sdk-version, 4, -F, /tmp/APKTOOL8730309660863791006.tmp, -I, /root/apktool/framework/1.apk, -S, /var/www/html/source/tmp/kinggoo/res, -M, /var/www/html/source/tmp/kinggoo/AndroidManifest.xml]
        at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357)
        at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336)
        ... 5 more
Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 4, --target-sdk-version, 4, -F, /tmp/APKTOOL8730309660863791006.tmp, -I, /root/apktool/framework/1.apk, -S, /var/www/html/source/tmp/kinggoo/res, -M, /var/www/html/source/tmp/kinggoo/AndroidManifest.xml]
        at brut.util.OS.exec(OS.java:89)
        at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:355)
        ... 6 more

在反编译后,重新打回原始包,出如下错误,需要在编译zlib环境配置时执行export CFLAGS=-m32,在上面有提到

[root@kinggoo.com tmp]# apktool b  temp  b.apk
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 4, --target-sdk-version, 4, -F, /tmp/APKTOOL2297571230398991014.tmp, -I, /root/apktool/framework/1.apk, -S, /var/www/html/source/tmp/temp/res, -M, /var/www/html/source/tmp/temp/AndroidManifest.xml]
        at brut.androlib.Androlib.buildResourcesFull(Androlib.java:358)
        at brut.androlib.Androlib.buildResources(Androlib.java:283)
        at brut.androlib.Androlib.build(Androlib.java:206)
        at brut.androlib.Androlib.build(Androlib.java:176)
        at brut.apktool.Main.cmdBuild(Main.java:228)
        at brut.apktool.Main.main(Main.java:79)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 4, --target-sdk-version, 4, -F, /tmp/APKTOOL2297571230398991014.tmp, -I, /root/apktool/framework/1.apk, -S, /var/www/html/source/tmp/temp/res, -M, /var/www/html/source/tmp/temp/AndroidManifest.xml]
        at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357)
        at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336)
        ... 5 more
Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 4, --target-sdk-version, 4, -F, /tmp/APKTOOL2297571230398991014.tmp, -I, /root/apktool/framework/1.apk, -S, /var/www/html/source/tmp/temp/res, -M, /var/www/html/source/tmp/temp/AndroidManifest.xml]
        at brut.util.OS.exec(OS.java:89)
        at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:355)
        ... 6 more
aapt: error while loading shared libraries: libz.so.1: wrong ELF class: ELFCLASS64

出现这种错误,你懂的,要么没安装,要么安装后lib的so包没有在PATH内,或者没有ldconfig

error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

还有如果在往回打包的时候如果出现aapt: /lib/libz.so.1: no version information available (required by aapt),则需要升级你的zlib,首先肯定是卸载掉你自身系统内的zlib ,卸载方法如下:

rpm -e --nodeps --allmatches `rpm -qa|grep  zlib`

然后重新安装
而下面这种问题是因为此图根本不是9.png图(九妹图),甭管它,估计在这个文件夹下会有mode_line.png图

W: Cant find 9patch chunk in file: "drawable-hdpi/mode_line.9.png".

可能看着比较乱,没办法写完之后好久了,都忘记当时为什么这么写了~

- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/app-apktoolpackage.htm
发表评论?

14 条评论。

  1. 好资料,我用的是 RHL-6.0_64 aapt 弄不起来,升级了 zlib 工具之后可以了。但是 zlib 依赖标准 c 库,这里浪费了我一点时间。

    • 搞定了吧 工作太忙好久没看博客里的留言了 真抱歉。 64位是会遇到很多问题 记得把lib里面的so都要替换 做好下一个为zlib在系统里这样出问题直接卸载还方便

  2. android支持直接运行py么?

发表评论