首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android技艺03:对APK进行重签名

2013-06-25 
android技巧03:对APK进行重签名查看C:\Program Files\Java\jdk1.6.0_18\bin,生成了以后签名用的证书Key:mi

android技巧03:对APK进行重签名

查看C:\Program Files\Java\jdk1.6.0_18\bin,生成了以后签名用的证书Key:mine123.keystore

android技艺03:对APK进行重签名

? ? ? ??这里,大家如果试过在eclipse中生成一个签名文件时,它的大小也是2kb,同时生成过程中,还是会让填写别名的。

2. ? ? ?删除之前的签名文件
1). ? ? 用解压工具解压缩apk文件(如:解压到D:\Sign\PhoneBook)

android技艺03:对APK进行重签名

压缩包内容解析:

    AndroidManifest.xml

    该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息[ , ],如要把apk上传到Google Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具[ , ]解开,具体命令为:java -jar AXMLPrinter2.jar AndroidManifest.xml

      META-INF目录?

      META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。

        res目录?

        ? ? ? res目录存放资源文件。包括图片,字符串等等。

          lib目录

          lib目录下的子目录armeabi存放的是一些so文件。这个地方多讲几句,都是在开发过程中摸索出来的。eclipse在打包的时候会根据文件名的命名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文件中的。其他非eclipse开发环境没有测试过。如果你是用SDK和NDK开发的话,这部分很重要,甚至可以通过把一些不是so文件的文件通过改名打包到apk中,具体能干些什么那就看你想干什么了,呵呵呵!

            assets目录

            assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。具体的方法可以参考SDK中的例子:在sdk的 \SDK\1.6\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\ApiDemos 例子中,有个com.example..android.apis.content 的例子,在这个例子中他把一个text文件放到工程的asset目录下,然后把这个txt当作普通文件处理。处理的过程在ReadAsset.java中。同理,asset也可以放置其他文件。

              classes.dex文件?

              ? ? ? classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。Android模拟器中提供了一个dex文件的反编译工具,dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。另,有人介绍到Dedexer是目前在网上能找到的唯一一个反编译dex文件的开源工具,需要自己编译源代码。

                resources.arsc?

                ? ? ? 编译后的二进制资源文件 ?”
                ?
                2). ? ? 找到下面的目录META-INF,删除目录META-INF
                3). ? ? 将PhoneBook整个文件夹用zip工具,重新打包成zip压缩包,然后更改后缀为apk (注意:产生的PhoneBook.zip中没有二级根目录)
                ?
                3. ? ? ?重新签名APK文件
                1). ? ? 将证书复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign)
                2). ? ? 在doc中切换到需要重新前面的apk文件的目录下
                cd D:\Sign
                3). ? ? 运行下面的命令
                jarsigner –verbose –keystore mine123.keystore –signedjar PhoneBook_signed.apk PhoneBook.apk mine.keystore
                /*解释:hjarsigner是Java的签名工具
                -verbose参数表示:显示出签名详细信息
                -keystore表示使用当前目录中的mine123.keystore签名证书文件。
                -signedjar PhoneBook_signed.apk表示签名后生成的APK名称,PhoneBook.apk表示未签名的APK Android软件, mine.keystore表示别名
                */
                输入完回车后屏幕如下图显示:

                ?

                android技艺03:对APK进行重签名

                查看D:\Sign目录,已生成重新签名后的PhoneBook_signed.apk文件

                android技艺03:对APK进行重签名

                另外,有时候会发现这种方式打出的APK包在某些地方用不了,文章《简单修改APK和重新签名》提供了一个更为便捷的方案。

                ?

                参考资料:

                重新签名APK文件

                ?

热点排行