从eclipse到应用商城
——Android项目混淆签名加固打包上线全流程
说明:
这篇文章是笔者上线Android项目的经验总结,亲身测试,保证真实可用。
主要内容如下:
1 混淆
对eclipse项目目录下project.properties文件和proguard-project.txt文件进行修改,实现代码混淆,为自己的apk增加初级防护
2使用eclipse项目右键AndroidTool生成自己的签名文件和签过名的apk
3 使用doc控制台获取签名文件中的SHA码,从百度地图上生成新的key,使用第2步中生成的签名文件以同样的步骤再次导出apk。(这一步主要针对项目中使用了第三方接口和key的开发者,如果没有使用可以直接忽略)
4 使用360加固宝对第3步中生成的apk进行加固处理。使用APKSign软件为加固后的apk文件进行重新签名
5将自己签名、加固后的应用发布到应用商城
一、 代码的混淆
在将自己的Android项目导出为apk文件之前,我们最好将代码混淆一下,防止恶意侵权和破解,eclipse给我们提供了这样的工具,做法如下:
1 找到项目下project.properties文件,打开后将
#proguard.config=${sdk.dir}/tools/proguar……
这句话前面的#去掉,也就是让这条指令生效
图示:修改前
图示:修改后
2 找到项目下proguard-project.txt文件,在文件末尾增加这两句话:
-dontwarn com.baidu.**
-keep class com.baidu.** { *;}
意思是引用的第三方的包baidu包不被混淆,如果不加这个语句,导出项目就会报错,如果你使用的还有其他的包,同样增加这样的语句,将包名换一下即可。
图示:修改前
图示:修改后
完成这两步之后,如果apk被反编译工具反编译之后,类名会变成abcd等字母,会增加破解难度。
二、生成自己的签名文件和签完名的apk
我们使用eclipse开发项目测试完成需要上线时,需要导出apk文件,我们在虚拟机上运行的时候,在bin文件夹下回自动生成一个apk文件。
我们最好不好直接用这个apk文件。这是因为签名文件的缘故。签名文件后缀名是keystore。所谓的签名可以理解成自己的app署名,就是声明版本,表明自己是这个app的主人,这样便于声明权利,同样也要承担相应的责任和义务。所以每一个apk要想在设备上正常运行,必须要有自己的签名文件。当我们安装一个apk的时候,如果设备上已经有一个包名相同,签名文件也相同的apk,那么新的apk就会覆盖以前的apk,也就是程序升级。如果包名相同,签名文件不同,安装的时候会发生冲突,只有卸载掉旧的apk,才能装上新的。也就说,签名文件可以保护自己的应用不被恶意地破解和替代。
当我们在虚拟机上测试自己开发的应用的时候,签名文件使用的是eclipse上自带的签名文件debug.keystore。
为了以后便于升级和维护,我们最好使用自己的签名文件。方法如下:
Eclipse中选中项目,鼠标右键选择AndroidTool
会弹出一个对话框,选择要导出的项目。
注意:项目名不能出现汉字,否则无法导出。如果项目中有汉字,copy项目重新命名即可。选择下一步,会让你选择一个签名文件,第一次使用的时候,选择create newkeystore,指定签名文件的存储位置和文件名,注意文件后缀名要手动加上,比如mykeystore.keystore,输入自己的密码。
如果是以后再导出项目,选择use exiting keystore,也就是使用自己已经创建好的签名文件,所以签名文件一定要保管好,密码也不能忘,否则自己开发的这个应用以后用户要升级的话就会很困难,要先卸载掉旧的,才能装你的这个新版的应用。而且自己开发的不同的项目也推荐使用同一个签名文件,以后自己的各个程序之间的维护会更加方便。
选择下一步,设置自己证书的详细信息,alias别名,比如wangjinxi,validity是有效期,单位是年,尽量写长一点,比如100。下面就是自己的其他信息,包括姓名、单位、城市、省份、国家,中国使用CN即可。
选择下一步,指定生成的apk所在的文件夹。
点完成,大约半分钟后,会生成一个签名文件和绑定了该签名文件的apk。
三、获取签名文件中的SHA码,申请新的百度地图key,使用已有的签名文件,重新导出新的apk文件
如果你的应用中使用了百度地图等第三方接口,这个步骤需要看一下,否则可以忽略。
当我们的项目中使用了百度地图等第三方的接口时(以下以百度地图为例),我们需要在百度地图的开发平台中申请一个key,并在自己项目的清单文件中配置这个key。
申请这个key的时候,需要我们提供SHA码,每个签名文件中都对应着一个SHA码,我们在虚拟机上测试的时候,使用的是eclipse中默认签名的SHA码。
所以我们要做的就是获得自己签名中的SHA码,用这个码申请新的key,在项目清单文件中配置新的key,并重新导出项目。
获得签名文件中的SHA码
-----------------------------------------------
方法一、eclipse中导出签名的apk,方法同上,选择使用已经存在的keystore文件,点击下一步,就会看到这个证书的SHA码
--------------------------------------------------
方法二,使用doc控制台
1 前提是你要安装jdk并配置环境变量
2 用cmd指令或者在开始菜单中打开控制条,输入
cd C:\Users\Administrator\Desktop\keystore_dir
回车打开签名文件,cd后面是你的签名文件所在的文件夹路径
3 输入
keytool -list -v -keystore mykeystore.keystore
回车,mykeystore.keystore是你签名文件的文件名
提示输入密钥库口令,直接回车即可看到证书的详细信息。
其中证书指纹 (SHA1)就是我们需要的SHA码,复制出来
-------------------------------------------------------
使用这个SHA码重新申请新的key,放入项目的清单文件中并重新导出项目。
注意导出的时候,使用我们之前创建的mykeystore.keystore签名文件,不要使用debug.keystore,也不要重新new一个keystore,因为签名文件和你的百度地图key要保持一致,否则地图无法正常显示。
导出签名项目步骤同上,唯一不同是,选择use exitingkeystore
输入密码,选择别名,再次输入密码
会看到让你选择生成的apk的位置,并且你会看到这个签名的MD5码和SHA码,点击完成即可看到重新签名的apk文件。
笔者曾经遇到错误,输入密码之后,别名一栏是空,后来导出好几次才成功,怀疑是签名文件损坏,也有可能是密码错误,所以要多试几次。这样就生成了有自己签名的并且能正常显示百度地图的apk文件。
四、加固和重新签名
虽然我们已经对代码进行了混淆,但是签完名的apk不要直接上线。为了更好的保护我们的apk,推荐使用360加固保。
操作起来比较简单,直接进入360加固保
如果没有账号,需要注册一个,上传项目
选择开始加固
大概几分钟后加固完成,选择“下载应用”,会获得加固后的apk文件
加固后的apk文件即使被反编译,也只能看到很少一部分,大多数的代码已经被编译成so文件,很难再被破解。
加固后的apk文件需要再次签名,可以使用APKSign,按照提示输入路径和密码即可。
APKSign下载地址:
http://download.csdn.net/download/wangjx562/9669187
选择开始签名,我们会得到加固后并且签了名的apk
五、上线
这样签名加固后的apk就可以上线了
(一)可以选择的应用商城
360移动开发平台
http://dev.360.cn/
应用宝
http://sj.qq.com/
应用汇
http://www.appchina.com/
小米开放平台
http://dev.xiaomi.com/console/
百度开发者平台
http://app.baidu.com/
优亿市场
http://www.eoemarket.com/
voio、华为 不允许个人开发者发布应用, 安卓市场与百度合并,所以发到百度上就不用再上安卓市场了。豌豆荚,个人资质证明无法上传。安智、历趣、沃商店笔者没有用,大家可以试一下。
(二)需要准备的材料
1 开发者手持身份证相片
2 身份证正反面
3 apk图标
4 apk截图
有些还会要类似宣传海报的图片,而且大都会对图片的像素和大小作出比较严格的限制,所以你能会点photoshop就方便了,随时裁剪出符合商城要求的图片。
通过混淆、加固、三次签名,我们的apk终于可以上线了,在令人期待(教人捉急)的审核后就能看到我们的应用了。
总结一下步骤:
1 混淆
在项目project.properties文件中去掉#注释
在proguard-project.txt文件中增加保护第三方包语句
实现代码混淆,为apk加上初级防护
2 第一次签名
项目右键AndroidTool
3 申请新key,第二次签名
从签名文件中获取SHA码,申请新的key,项目右键AndroidTool
4 加固,第三次签名
使用360加固保,上传第二次签名后导出的apk,获得新的apk,使用APKSign为加固后的apk文件进行第三次签名。
5 上线
准备好身份证相片、图标、截图、文字说明等材料,在360移动开发平台、应用宝、应用汇、小米开放平台、百度开发者平台、优亿市场等平台上发布自己的应用。
本文原创,版权所有,转载请标明出处,欢迎技术交流,严禁篡改抄袭。