android开发之应用打包签名混淆流程

项目做的差不多了,要签名,然后混淆防治被反编译,记录下流程

默认各种环境都是配置好了的。

主要分以下几步

1、生成ant打包所需的配置文件

2、生成应用签名的keystore,对apk签名

3、编写混淆文件,混淆代码,防止反编译

第一步,生成ant打包的配置文件

在项目根目录下执行指令:android update project —path .

会自动生成三个目录: build.xml,local.properties,proguard-project.txt

还有一个要自己建的ant.properties

一共四个文件

build.xml:Ant的默认生成文件,描述了打包的任务和流程,其语法参考点击打开链接

local.properties:包含本地的环境变量sdk.dir=/Users/xx/eclipse/adt-bundle-mac-x86_64-20131030/sdk

proguard-project.txt:混淆文件,对代码进行混淆,语法参考点击打开链接

ant.properties:签名文件的相关配置。

这一步完成就可以用ant打包应用了,进入到应用根目录,运行ant release,就会在bin目录下生成打包好的apk,只是都是没有签名的,这时候还没有配置签名。

第二步、生成keystore,配置签名

命令:keytool -genkey -keystore jason0539.keystore -keyalg RSA -validity 10000 -alias jason0539.keystore

输入密钥库口令: *********

再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  blog.csdn.net/jason0539
您的组织单位名称是什么?
  [Unknown]:  jason0539
您的组织名称是什么?
  [Unknown]:  jason0539
您所在的城市或区域名称是什么?
  [Unknown]:  秦皇岛
您所在的省/市/自治区名称是什么?
  [Unknown]:  河北
该单位的双字母国家/地区代码是什么?

[Unknown]:  CN

CN=huodianditu.bmob.cn, OU=jason0539, O=jason0539, L=秦皇岛, ST=河北, C=CN是否正确?
  [否]:  y

输入 <jason0539.keysotre> 的密钥口令

(如果和密钥库口令相同, 按回车):

回车之后就会在目录下生成jason0539.keystore文件,就是用来对应用签名的文件了。

命令参数说明: 

-genkey    产生证书文件

-keystore  指定密钥库的.keystore文件中

-keyalg     指定密钥的算法

-validity    为证书有效天数,这里我们写的是10000天。

-alias       产生别名

在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,切忌需要记下来后面还要用,

注意:

1、CN(Common Name - 名字与姓氏):其实这个“名字与姓氏”应该是域名,比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,会出问题。浏览器访问时,弹出一个对话框,提示“安全证书上的名称无效,或者与站点名称不匹配”,用户选择继续还是可以浏览网页。但是用http client写程序访问的时候,会抛出类似于“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的异常。

2、在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同。否则下一步签名时会出现错误:jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。

第三步、接下来配置ant.properties,使用keystore对apk签名

在ant.properties文件中,添加如下内容:

key.store=jason0539.keystore

key.alias=jason0539.keystore

key.store.password=***

key.alias.password=***

android.library=false

其中:

keystore为私钥库文件。

key为签名需要使用的私钥。

key.store.password为私钥库的密码。

key.alias.password为私钥的密码。

这一步完成,然后命令行直接运行ant release就会打包成功了,并且是签名过的,在bin目录下。

这一步遇到的问题:

第一次把别名的keystore输成了keystroe,结果一直提示build.xml:1151: Signing key jason0539.keystore not found

后来把这个删掉,想重新生成一个新的keystore,结果提示android Keystore was tampered with, or password was incorrect: Password verification

后来意识到可能跟两个keystore的名字相同有关,就又删掉,重新生成一个,名字不叫jason0539.keystore了,改为jason.keystore,这下就成功了。

第四步、混淆文件

在project.properties里面有一行被注释掉的代码如下

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

把这行注释取消,然后根据自己的项目,去编写proguard-project.txt这个文件作混淆就可以了。

具体的混淆语法可参考点击打开链接

这一步主要注意的是,如果项目中用了第三方的jar包,比如百度地图的,要注意保持里面一些类不被混淆,否则会crash,具体保持哪些类,在百度开放平台会有说明,去对应jar包的官网看就好了。

如果用了很多第三方sdk,混淆后可能启动应用就会crash,

建议根据log找到对应出问题的sdk,然后去对应开放平台查看混淆注意事项,把需要保持的类保护好。以此类推,把所有第三方sdk配置好就没问题了。

更多参考

通过ant脚本,编译打包android工程

android proguard详解

ant使用全总结

作者:jason0539

博客:http://blog.csdn.net/jason0539(转载请说明出处)

扫码关注微信公众号,看点不一样的东西

时间: 2024-11-05 20:48:04

android开发之应用打包签名混淆流程的相关文章

Android Studio第一期 - 打包签名混淆反编译

开始先说打包签名: 1.打开你的AS选中你的project->bulid,     2.跟eclipse一样搞一个key,自己填写一下改写的什么注册的信息什么的,然后就会获得key和password,此处省略一万字--!然后就是填写了, 图2, 3.等待就可以了,project的app目录下你会找到打包签名的apk包,就这样. end 下面说混淆部分: 1.把你的build.gradle,改一下true,     2.接着就是proguard-rules.pro里面的,注意:不要写jar了哈,A

Android开发之给应用签名打包

Android开发之给应用签名打包 什么是签名打包? 在Android 系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限.Android使用Java的数字证书相关的机制来 给apk加盖数字证书. Android系统要求每一个安装进系 统的应用程序都是经过数字

Android开发把项目打包成apk-(转)

做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk".将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装.Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装.生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非

Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店

#1.用Eclipse的话导出app其实还是很容易的.大家看我的步骤.有图有真相哦 选择一个项目 创建一个新的,位置随便,下面是密码 这里都是一些名字,地区,组织,国家.看你们自己的了 选择你要存放apk的位置 打完收工 Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店,布布扣,bubuko.com

(转)Android开发把项目打包成apk

转:http://blog.csdn.net/luoyin22/article/details/7862742 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk".将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装.Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装.生成数字签名以及打包

android 开发 gradle 自己会容易混淆的东西

使用intellij idea 开发android ,关于 gradle 和 android gradle plugin 容易混淆地方,做下记录: 一. build.gradle 文件有两个地方存在,一个是整个项目中的,一个是APP module 中的,这个好理解,就是全局设置和局部设置的关系 二. 项目中的 build.gradle 文件中,有一句 classpath 'com.android.tools.build:gradle:2.1.3'  这个 这个2.1.3 的版本号是android

android 百度地图 在打包签名后key验证失败的解决方案

在开发的过程中我们或许碰到过这样的问题,百度地图开发调试的应用程序正常,打包后显示授权key失败 这是由于调试生成的应用程序使用的是eclipse默认的SHA1的值 我们需要使用自己创建的数字签名来解决这一问题.以下是解决方案 设置android 环境变量 如图所示 打开Cmd输入以下指令 1:cd C:\Program Files\Java\jdk1.7.0_13\bin 2:keytool -genkey -alias android.keystore -keyalg RSA -validi

android库工程jar打包和混淆

公司有个项目需要以库的形式提供给第三方使用,但是java代码又不想别人知道,还有资源文件也需要一起打包,很常见的需求,下面就是解决此事的过程. 1.直接将库工程提供给第三方,android库工程引用方式 被老板pass,代码客户都可以看到,不行. 2.将库工程TestLib的src导出成jar,把res目录直接发给第三方 失败.导出的jar依然是引用库工程的R文件(com.test.lib.R),但是资源提供给第三方后,生成的R为com.test.R,因此运行时找不到com.test.lib.R

iOS 开发 -----公司测试打包上传流程

打包iOS应用程序 如果想要将做的iOS应用程序安装到自己的iOS设备上测试.或者安装到别人的iOS设备上,或者想发布到App Store中,先要给应用签名.签名就要有证书,这就需要申请证书的过程了. 把自己的应用程序安装到设备中,主要有一下几种方式: 把iOS设备与电脑连接起来,如果Xcode中已经添加了包含这个设备的Profile文件且在工程中已经选择了该文件,那么在Xcode左上角便可以选择这个设备,之后点击RUN,程序就被安装在这个iOS设备中了.这个主要用于在真机上测试程序. 使用Xc