Android-APK打包,发布,代码混合问题解决

在eclipse中将android工程打包成apk(源自http://my.oschina.net/ykai/blog/31911)

1.)生成keystore

按照下面的命令行 在C:\ProgramFiles\Java\jdk1.6.0_10\bin>目录下,输入keytool-genkey -alias android.keystore -keyalg RSA -validity 100000-keystore android.keystore

参数意义:-validity主要是证书的有效期,写100000天;空格,退格键 都算密码。

命令执行后会在C:\ProgramFiles\Java\jdk1.6.0_10\bin>目录下生成 android.keystore文件。如图-1

图-1命令行下生成android.keystore

2.)eclipse生成apk文件

选择要打包的项目,右键点击–>Androidtools–>Export Signed Application Package…如图-2

图-2 eclipse 打包工具

接下来的步骤就是不断的next。下面仅贴出图片,不解释。

step 2:选择打包的项目

step 3: 选择生成的android.keystore文件并输入密码

step 4:选择alias key并输入密码

step 5:最后选择生成android apk文件的目录及文件名

最终生成的apk文件



--------------------------------------------------------------------------------------------

Android APK的签名与重新签名

(http://zhiwei.li/text/2010/12/android-apk的签名与重新签名/)

现在,我们介绍Android APK的签名与重签名的一些要点

APK实际上是一个ZIP压缩文件

解压缩后有个META-INF目录

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。

安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。

每一个Android应用程序必须要有数字签名才能安装.
有两种方法:一种是使用调试密钥(可以在模拟器或者设备上做调试时使用),
还有一种就是私钥(为应用程序发布用).当组建Adriod应用程序时组建工具会自动为应用程序提供签名,
但是如果想发布应用程序的时候,必须使用自己的私钥.

编译时使用Release模式 需要手工添加签名.只有有签名的应用程序才可以安装.

签名工具;来自开源软件
Keytool
创建一个密钥证书存储文件和一个私钥,用来为.apk文件签名

Jarsigner (类似的签名工具)
用Keytool产生的私钥为.apk文件签名

使用Auto-sign工具重新对其进行签名即可,首先,删掉META-INF文件夹下的签名文件
CERT.SF
CERT.RSA
从文件名就可以看出 cert.rsa 是 证书的rsa公钥

替换原来apk包中的classes.dex, 在GNOME 的归档管理器 中拖进去即可, windows资源管理器,其它压缩软件也可支持拖拉.

SignApk.jar is a tool included with the Android platform sourcebundle.

testkey.pk8 is the private key that is compatible with therecovery image included in this zip file

testkey.x509.pem is the corresponding certificate/public key

Usage:

java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zipupdate_signed.zip

在哪里找到这些东西
build\target\product\security目录下面的platform.pk8和platform.x509.pem两个文件

签名工具在 build\tools\signapk\signapk.jar

据说签名时 不必要删除原来的CERT.SF和CERT.RSA, 会自动替换掉的

http://gbs-ben.googlecode.com/files/Auto-sign.rar

http://file.geeka.net/Android/tools/Auto-sign.rar

在sun-java6-jdk 中包含有一个签名工具
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner

在openjdk-6-jdk 也有一个签名工具
/usr/lib/jvm/java-6-openjdk/bin/jarsigner

验证签名
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner -verify/tmp/zhiwei.li.apk
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner -verbose -certs-verify /tmp/zhiwei.apk 会输出详细的信息(输出详细信息和验证时显示证书)

在 sun-java6-bin 有一个创建数字证书的工具
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/keytool
/usr/lib/jvm/java-6-sun-1.6.0.22/jre/bin/keytool

openjdk-6-jre-headless
/usr/lib/jvm/java-6-openjdk/bin/keytool
/usr/lib/jvm/java-6-openjdk/jre/bin/keytool

/usr/lib/jvm/java-6-sun-1.6.0.22/bin/keytool -genkeypair -aliaszhiwei.keystore -keyalg RSA -validity 11911 -keystorezhiwei.keystore

用 /usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner -verify-verbose -certs 选项可以查看详细的验证信息
比如证书的有效时间, 用keytool生成的证书, 据说有效时间应该在2030年之后才可以在android上运行

调试签名的位置
debug.keystore 默认位置在 ~/.android/目录

Keystore name: “debug.keystore”
Keystore password: “android”
Key alias: “androiddebugkey”
Key password: “android”
CN: “CN=Android Debug,O=Android,C=US”

---------------------------------------------------------------------------------------------
发布程序到AndroidMarket(http://www.ziyouku.com/archives/publisher-to-the-android-market.html)

给你的程序签名

注意事项:

  • 所有提交到Market的程序必须经过签名。未经签名的程序不能安装。
  • 你可以使用个人证书去签名程序,不一定要经证书机构授权。
  • 用Debug版本证书签名的程序将不能发布。
  • 在安装程序时会检测签名证书是否过期。如果程序在安装后证书过期,程序也能正常使用。
  • 你可以使用keytool和Jarsigner产生密钥并签名你的程序。
  • l你的程序在签名后还需要使用zipalign去优化。

建议:

  • 用同一密钥签名所有程序,以保证程序的无缝升级。
  • 证书的有效期最好在25年以上。发布到Market的程序中证书有效期必须在2033年10月22日以后。

 

如何签名

除了下面提到的方法,还有一种利用GUI来编译的方法。

在Eclipse中Package Explorer里选择要编译的工程,File->Export,打开Android文件夹,选择Export AndroidApplication,一步一步完成向导即可。这样程序就会编译,签名,优化,可以直接发布到Market了。 获取合适的私有密钥

通过Keytool去产生私有密钥。Keytool在JDK/bin目录里(比如C:\ProgramFiles\Java\jdk1.6.0_20\bin)。

 

Keytool参数描述
-genkey生成公钥和私钥
-v输出详细信息
-keystore<keystore-name>.keystore生成的keystore文件名
-alias <aliasname>此密钥的别名。只保留前8位字符
-keyalg<alg>加密算法。支持DSA和RSA
-dname<name>用于描述此密钥的创建者信息。如果没有提供,Jarsigner会提示你输入这些信息
-validity<valdays>密钥有效期,按天数。最好>10000

例如:keytool -genkey -v -keystoremy-release-key.keystore -alias alias_name -keyalg RSA -validity10000更多关于keytool的信息:http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security

 

编译Release版本程序

在release状态下程序是未经签名的。在Eclipse中导出未经签名的release版本apk文件。在PackageExplorer中找到要编译的工程,右击选择Android Tools->Export UnsignedApplication Package

 

用私有密钥签名

通过Jarsigner来使用私有密钥签名。

例如:jarsigner -verbose -keystore my-release-key.keystoremy_application.apk alias_name

验证已签名程序:jarsigner -verify my_signed.apk

 

优化APK文件

通过zipalign来优化apk文件。Zipalign可以在Andorid SDK/tools目录下找到。

例如:zipalign -v 4 your_project_name-unaligned.apkyour_project_name.apk

your_project_name-unaligned.apk是输入,your_project_name.apk是输出。如果要覆盖已有文件,需要加上-f参数

 

添加版本信息

主要有两方面,一个是程序的版本号,另外一个是程序中要求的系统API版本号。二者都需要在AndroidManifest.xml中设定。程序版本号

Android:versionCode: int类型,只能是整数。别的程序在调用时要用到,最终用户无法看到。

Android:versionName: 字符串类型。就是给最终用户看的。 程序要求的系统API版本号

Android:minSdkVersion: 要执行此程序需要的最低的系统API版本

Android:targetSdkVersion: 此程序设计时的目标系统API版本

Android:maxSdkVersion: 此程序设计时支持的最高的系统API版本

 

准备发布

发布前的检查列表:

在考虑发布程序之前

1. 在真实设备上进行完整的测试

2. 考虑在程序中添加最终用户许可协议

3. 在程序中添加图标和标题

4. 关闭并清理log和debug信息

在进行最后的编译之前

5. 添加版本号

6. 获取合适的密钥

7. 如果用到了Mapview元素,请注册Maps API key

在程序编译完成后

8. 对程序进行签名

9. 测试编译好的程序

 

发布程序到AndroidMarket

1. 注册账号:http://market.android.com/publish

2. 在提交程序之前,必须确保程序符合Android Market 服务器的要求:

(1) 对程序签名的私有密钥有效期必须在2033年10月22日之后。

(2)程序中必须设定了android:versionCode和android:versionName。前者用于程序的更新,后者会展示给最终用户。

(3) 在程序的manifest中必须定义了android:icon和android:label。

if ($ != jQuery) { $ = jQuery.noConflict(); }

 

步骤如下


1、上传你的.apk文件。(必填)
2、假如2张游戏截图,要求320w x 480h, 480w x 800h, 或480w x 854h,24 bit PNG orJPEG图片。(必填)
3、上传高清icon,要求512w x 512h的24 bit PNG or JPEG图片,最大1024KB。(必填)
4、上传特写图片,要求1024w x 500h的24 bit PNG or JPEG图片。(选填)
5、促销视频。首先需要上传到youtube,然后把链接放到这里。(选填)
6、勾选后选择退出市场,需要60天生效。
7、选择语言。目前还没有简体中文。选择语言后,需要去掉不必要的语言。
8、写标题。(用所选语言填写,最多30个字母)
9、写描述。(用所选语言填写,最多4000个字母)
10、写将要出的下一个版本的变化,也就是我们说的新版本更新内容。(英文,最多500个字母)
11、产品促销广告文字。(英文,最多80个字母)
12、选应用类型(应用类、游戏类)
13、选app种类
如果之前选的是应用类,则显示如下种类:
comics 漫画
communication 通讯
demo 演示
entertainment 娱乐
finance 财务,财经
health 健康
lifestyle 生活
multimedia 多媒体
news & weather 新闻与天气
productivity 生产
reference 参考
shopping 购物
social 社会
software libraries 软件库
sports 体育
themes 主题
tools 工具
travel 旅游
如果之前选的是游戏类,则显示:
arcade & Action 动作冒险类
brain & puzzle 益智解密类
cards & casino 棋牌赌博类
casual 休闲类
14、填入价格。有免费与付费可选。注:这里如果选定免费,则以后不可以改成付费。
15、复制保护:如果选off ,则改应用可以被复制。如果选on,谷歌会有措施保护拷贝情况。
16、选择内容级别:分mature(适合成人)、teen(适合十几岁合同)、pre-teen(适合10岁之前的儿童)、all(适合所有)
17、选择区域:可选择在全球范围展示,也可以选择某几个国家。
18、填入官方网站。
19、联系信箱。
20、联系电话。
21、选中,则表示:我的软件遵守android内容条款。
22、选中,则表示:我承认我的软件受美国出口法支配,不管我在哪个国家和地区。我同意我将遵守所有相关法律,包括申请人信息的加密功能。我在此证明我的软件是经过授权的从美国出口。
然后点publish发表软件。
也可点save保存或点delete删除。

---------------------------------------------------------------------------------------------

事实上,使用ECLISPE开发的ANDROID项目,在其bin文件夹里,会自动生成一个已签名的APK文件,可直接使用。但是,这个APK文件使用的是ECLIPSE默认的KEY进行签名,有效期只有一年。而发布到MARKET,有个50年的时间限制(国内的分享平台,一般没有这个限制)。这时,就需要使用自己的KEY来打包了。
这些天,尝试用自定义的KEY打包,如果项目没有第三方JAR的话,打包成功。如果有的话,可能会出现代码混合的问题(可能重复定义或引用相关类引起)。这时,就没法打包成功。但一个比较奇怪的问题是,项目在开发的过程是没有报错的,也就是不影响使用。使用BIN文件夹下的APK,也完全正常使用。因此,产用了一种比较婉转的方式来解决自定义打包的问题。即使用KEYTOOLS生成一个debug.keystore,覆盖掉ECLIPSE默认的KEY。KEY的信息和位置如下:
按照下面的命令行 在 C:\ProgramFiles\Java\jdk1.6.0_10\bin>目录下,输入 keytool-genkey -alias debug.keystore -keyalg RSA-validity 100000 -keystore debug.keystore

调试签名的位置
debug.keystore 默认位置在 ~/.android/目录(WIN7下是:C:\Users\pc\.android)

Keystore name: “debug.keystore”
Keystore password: “android”
Key alias: “androiddebugkey”
Key password: “自定义
CN: “CN=Android Debug,O=Android,C=US”

这样,重新BULID(CLEAN)项目后,就可以把这个BIN文件夹里的APK发布到MARKET了。另外,MARKET对软件不同版本使用的KEY也有一致性要求。因此,要保留第一次发布时使用的KEY。

事实上这样做,就相当于在ECLIPSE里修改了默认的调试KEY,如下图。不到万不得已,不建议这样做。

签名的注意事项

  • 所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。Android系统不会安装没有数字证书的应用。
  • 签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。
  • 模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。如下图所示,Eclipse菜单的Window -> Preferences -> Android–> Build 下显示的是我们默认的调试用的签名数字证书。

image

  • 正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。
  • 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
  • 签名后需使用zipalign优化程序。
  • Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值