原文地址
http://blog.csdn.net/yuanfenwuyue1989/article/details/7739951
将Eclipse Android项目打包成APK文件是本文要介绍的内容,主要是来了解并学习Eclipse Android打包的内容,具体关于Eclipse Android内容的详解来看本文。
Eclipse Android项目开发完成以后就要将android项目文件打包成apk文件,并最终下载到真机上运行。下面是个人打包apk的过程,主要是以图文形式记录一下。其实最懒的办法,就是直接到eclipse项目的bin目录找到文件,那是eclipse系统自动生成的apk文件。
1、生成keystore
按照下面的命令行在C:\ProgramFiles\Java\jdk1.6.0_10\bin>目录下,输入keytool-genkey-aliasandroid.keystore-keyalgRSA-validity100000-keystoreandroid.keystore
参数意义:-validity主要是证书的有效期,写100000天;
会让你输入两个密码:keystore密码和keypass主密码,输入的密码不显示,空格,退格键都算密码。
命令执行后会在C:\ProgramFiles\Java\jdk1.6.0_10\bin>目录下生成android.keystore文件。如图-1图-1命令行下生成android.keystore
我们也可以用如下命令生成一个自签名的证书:
keytool -genkey -dname "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN" -alias myCA -keyalg RSA -keysize 1024 -keystore myCALib -keypass 654321 -storepass 123456 -validity 3650
这条命令将生成一个别名为myCA的自签名证书,证书的keypair的密码为654321,证书中实体信息为 "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN",存储在名为myCALib的keystore中(如果没有将自动生成一个),这个keystore的密码为123456,密钥对产生的算法指定为RSA,有效期为10年。
选择要打包的项目,右键点击–>Androidtools–>ExportSignedApplicationPackage…如图-2
![](https://i-blog.csdnimg.cn/blog_migrate/e372575c33728a384d02bfbe06981d21.jpeg)
接下来的步骤就是不断的next。下面仅贴出图片,不解释。
![](https://i-blog.csdnimg.cn/blog_migrate/3df3029b52e0784c23e618b1c4950382.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/5117183af9c3d7b636c7492b98346729.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/7acf1315f564d7bf6fc40add4f8d9a84.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/e33af6053f9239d21bb4f55e3b4a350e.jpeg)
最终生成的apk文件。
附:关于keystore
Keystore的别名:
所有的keystore入口(钥匙和信任证书入口)是通过唯一的别名访问.别名是不区分大小写的.如别名Hugo和
hugo指向同一个keystore入口.
可以在加一个入口到keystore的时候使用-genkey参数来产生一个钥匙对(公共钥匙和私有钥匙)时指定别
名.也可以用-import参数加一个证书或证书链到信任证书.
如:
1.
keytool -genkey -alias duke -keypass dukekeypasswd
其中duke为别名,dukekeypasswd为duke别名的密码.这行命令的作用是产生一个新的公共/私有钥匙对.
假如你想修改密码,可以用:
keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass
将旧密码dukekeypasswd改为newpass.
可以用-keystore指定其名时,将产生指定的keystore.
2.
检查一个keystore:
keytool -list -v -keystore keystore
Enter keystore password:your password(输入密码)
3.输出keystore到一个文件:testkey:
keytool -export -alias duke -keystore keystore -rfc -file testkey
系统输出:
Enter keystore password:your password(输入密码)
Certificate stored in file
例如:keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer
将把证书库 monitor.keystore 中的别名为 monitor 的证书导出到 monitor.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。
4.输入证书到一个新的truststore:
keytool -import -alias dukecert -file testkey -keystore truststore
Enter keystore password:your new password.(输入truststore新密码)
将keystore导入证书中这里向Java默认的证书 cacerts导入Rapa.cert
keytool -import -alias RapaServer -keystore cacerts -file Rapa.cert -keystore cacerts
5.证书条目的删除
keytool的命令行参数 -delete 可以删除密钥库中的条目,如: keytool -delete -alias RapaServer -keystore d2aApplet.keystore ,这条命令将 d2aApplet.keystore 中的 RapaServer 这一条证书删除了。
7,将证书导出到证书文件
keytool -export -alias myCA -file myCA.cer -keystore myCALib -storepass 123456 -rfc
使用该命令从名为myCALib的keystore中,把别名为myCA的证书导出到证书文件myCA.cer中。(其中-storepass指定keystore的密码,-rfc指定以可查看编码的方式输出,可省略)。
8,通过证书文件查看证书信息
keytool -printcert -file myCA.cer
9,密钥库中证书条目口令的修改
Keytool -keypasswd -alias myCA -keypass 654321 -new newpass -storepass 123456 -keystore myCALib
10,删除密钥库中的证书条目
keytool -delete -alias myCA -keystore myCALib
11,把一个证书文件导入到指定的密钥库
keytool -import -alias myCA -file myCA.cer -keystore truststore
(如果没有名为truststore的keystore,将自动创建,将会提示输入keystore的密码)
12,更改密钥库的密码
keytool -storepasswd -new 123456 -storepass 789012 -keystore truststore
其中-storepass指定原密码,-new指定新密码。
[3]
自己的实例
(1)用法总结:
1.
keystore好像一个数据库.每种操作,都要先指定keystore名与密码,以及操作的对象别名如:
..... -alias AAA -keystore jServer.keystore -storepass 123456
2.
操作的一般格式:
keytool + 操作类型[-genkey,-list -v,-printcert -file,-import -flie,-export -file,-delete,-
keypasswd -new,-storepasswd -new] + 再加上上面的格式.
(2)实例
C:\keytool>keytool -genkey -alias jason -keystore jServer.keystore -keyalg RSA
输入keystore密码: 1234
Keystore 密码太短 -至少必须为6个字符
输入keystore密码: 123456
您的名字与姓氏是什么?
[Unknown]: huang
您的组织单位名称是什么?
[Unknown]: access
您的组织名称是什么?
[Unknown]: access
您所在的城市或区域名称是什么?
[Unknown]: sz
您所在的州或省份名称是什么?
[Unknown]: gd
该单位的两字母国家代码是什么
[Unknown]: china
CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 正确吗?
[否]: y
输入<jason>的主密码
(如果和 keystore 密码相同,按回车): 74123
主密码太短 -至少必须为 6 个字符
输入<jason>的主密码
(如果和 keystore 密码相同,按回车): 456789
C:\keytool>keytool -list -v -keystore jServer.keystore
输入keystore密码: 123456
Keystore 类型: jks
Keystore 提供者: SUN
您的 keystore 包含 1 输入
别名名称: jason
创建日期: 2009-6-24
输入类型:KeyEntry
认证链长度: 1
认证 [1]:
Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
序号: 4a40fd0f
有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009
认证指纹:
MD5: 4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48
SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9
*******************************************
*******************************************
C:\keytool>keytool -export -alias jason -keystore jServer.keystore -rfc -file jasonfile
输入keystore密码: 123456
保存在文件中的认证 <jasonfile>
C:\keytool>keytool -export -alias jason -keystore jServer.keystore -storepass 123456 -rfc -f
ile jasonfile2
保存在文件中的认证 <jasonfile2>
C:\keytool>keytool -export -alias jason -keystore jServer.keystore -storepass 123456 -rfc -f
ile jasonfile.cer
保存在文件中的认证 <jasonfile.cer>
C:\keytool>keytool -printcert -file jasonfile.cer
Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
序号: 4a40fd0f
有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009
认证指纹:
MD5: 4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48
SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9
C:\keytool>keytool -keypasswd -alias jason -keypass 456789 -new 20070423 -keystore jServer -
storepass 123456
keytool错误: java.lang.Exception: Keystore 文件不存在: jServer
C:\keytool>keytool -keypasswd -alias jason -keypass 456789 -new 20070423 -keystore jServer.k
eystore -storepass 123456
C:\keytool>keytool -list -v -alias jason -storepass 123456
keytool错误: java.lang.Exception: Keystore 文件不存在: C:\Documents and Settings\Administr
ator\.keystore
C:\keytool>keytool -list -v -alias jason -keystore jServer.keystore -storepass 123456
别名名称: jason
创建日期: 2009-6-24
输入类型:KeyEntry
认证链长度: 1
认证 [1]:
Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
序号: 4a40fd0f
有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009
认证指纹:
MD5: 4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48
SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9
C:\keytool>keytool -delete -alias jason -keystore jServer.keystore -storepass 123456
C:\keytool>keytool -list -v -alias jason -keystore jServer.keystore -storepass 123456
keytool错误: java.lang.Exception: 别名 <jason> 不存在
C:\keytool>keytool -import -alias hwj -file jasonfile.cer -keystore jServer.keystore -storep
ass 123456
Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
序号: 4a40fd0f
有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009
认证指纹:
MD5: 4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48
SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9
信任这个认证? [否]: y
认证已添加至keystore中
C:\keytool>keytool -list -v -alias jason -keystore jServer.keystore -storepass 123456
keytool错误: java.lang.Exception: 别名 <jason> 不存在
C:\keytool>keytool -list -v -alias hwj -keystore jServer.keystore -storepass 123456
别名名称: hwj
创建日期: 2009-6-24
输入类型: trustedCertEntry
Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china
序号: 4a40fd0f
有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009
认证指纹:
MD5: 4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48
SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9
C:\keytool>keytool -storepasswd -new 20070423 -keystore jServer.keystore -storepass 123456
打包时,出现异常:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).
问题:当我们开发完成一个Android应用程序后,在发布该应用程序之前必须要经过的一步时打包应用程序。
至于从打包程序到发布的完整过程可以参考: Android 应用程序发布流程---碗豆荚发布流程
选择Eclipse ADT打包应用程序的过程如下:
可是在这时,会出现如下提示:
并且原本没有错误的程序(values/strings.xml)也会出现如下错误提示:
- "app_name" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic), "bg" (Bulgarian), "ca" (Catalan),
- "cs" (Czech), "da" (Danish), "de" (German), "el" (Greek), "en-rGB" (English: United Kingdom), "en-rIN" (English:
- India), "es" (Spanish), "es-rUS" (Spanish: United States), "et-rEE" (Estonian: Estonia), "fa" (Persian),
- "fi" (Finnish), "fr" (French), "fr-rCA" (French: Canada), "hi" (Hindi), "hr" (Croatian), "hu" (Hungarian), "hy-
- rAM" (Armenian: Armenia), "in" (Indonesian), "it" (Italian), "iw" (Hebrew), "ja" (Japanese), "ka-rGE" (Georgian:
- Georgia), "km-rKH" (Khmer: Cambodia), "ko" (Korean), "lo-rLA" (Lao: Lao People's Democratic Republic),
- "lt" (Lithuanian), "lv" (Latvian), "mn-rMN" (Mongolian: Mongolia), "ms-rMY" (Malay: Malaysia), "nb" (Norwegian
- Bokmål), "nl" (Dutch), "pl" (Polish), "pt" (Portuguese), "pt-rPT" (Portuguese: Portugal), "ro" (Romanian),
- "ru" (Russian), "sk" (Slovak), "sl" (Slovene), "sr" (Serbian), "sv" (Swedish), "sw" (Swahili), "th" (Thai),
- "tl" (Tagalog), "tr" (Turkish), "uk" (Ukrainian), "vi" (Vietnamese), "zh-rCN" (Chinese: China), "zh-rHK" (Chinese:
- Hong Kong), "zh-rTW" (Chinese: Taiwan, Province of China), "zu" (Zulu)
是什么原因呢?原因如下:
在Android SDK Tool r19之后, Export的时候遇到xxx is not translated in yyy, zzz的问题。
例如说"auto_name" is not translated in zh, zh_CN.
这是因为Android SDK Tool 將 ANDROID_LINT_COMPLETE_REGIONS 改为了需要检查。
如何解决呢?
其实,以上提示已经给我们答案。一种是“fix these before running Export ”,另一种是“turn off 'Run full error check when exporting app'”
方法如下:
先说后者:“turn off 'Run full error check when exporting app'“
(1)在Eclipse中打开Preference,按下图操作:
(2)再说前者:“fix these before running Export ”
操作如下图所示:
双击选择4,会在5的左侧出现对该问题的描述,如下:
框中也给我们三种解决方法。
即:
1》If the string should not be translated, you can add the attribute translatable="false" on the <string> element,
这种方法只适合数量较少的情况下。
2》字符串数量较大的情况,会很麻烦,这时可以采用另一种方法:
or you can define all your non-translatable strings in a resource file called donottranslate.xml.
即我们可以将所有不需要non-translatable 的字符串统一放入一个名叫donottranslate.xml的文件中。
在values新建donottranslate.xml文件,并把不需要non-translatable 的字符串放入其中.
donottranslate.xml:
- <span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="app_name">UMengDemo</string>
- <string name="action_settings" >Settings</string>
- <string name="sharePic_text" >分享本地图片</string></span><pre name="code" class="html" style="text-indent: 0.10000000149011612px;"><span style="font-size:14px;"></resources></span>
3》Or, you can ignore the issue with a tools:ignore="MissingTranslation" attribute.
以上操作完成后,最好选择“Clean”一下项目,方法如下:
这样就可以解决以上问题了。