使用Eclipse给 APK 签名遇到的问题及解决办法

  今天用 APK 反编译工具看了一下自己项目生成的 APK 文件,发现代码并没有混淆,于是设置了用 ProGuard 混淆代码,可是混淆是必须在非 Debug 模式才会生效的,即使你是以 Release 模式来 Run As 启动所生成的 APK 包,依然是没有使用 ProGuard 混淆的。于是决定导出一下 Release 版的 APK,导出分“签名”和“不签名”的两种,都这么做了,当然是要签名一下了,所以遇到了后面这两个问题。

  一、strings.xml 的翻译问题

  在你的项目名字上面点鼠标右键,弹出下面的菜单,选择 Android Tools -> Export Signed Application Package... ,


  然后会看到这么一个提示:


  并且得到下面这样的错误描述:


  大意是,导出操作因为 Lint Error Checking (检测 Lint 错误) 出现致命错误而退出,请修正这些错误再运行导出,或者在设置里的 Android -> Lint Error Checking 页面里把 “Run full error check when exporting app” 把选项关掉。

  而错误描述里面的说的是,strings.xml 里面的 app_name 缺少 af(Afrikaans), am(Amharic), ar, bg, bn-rBD, ca, cs, da, de ... 等语言的翻译,这个可能跟创建工程时自动生成的项目 appcompat_v7 里的 strings.xml 的语言数量有关,我们当然不希望每种语言都翻译一遍啊,纯属吃多了,除非我们真的想每种语言都翻译。

  另一方面,我们也不希望关掉所有的 Lint Error Checking,所以我们可以这么做,打开eclipse 菜单的 Windows -> Perferences,

  切换到 Android -> Lint Error Checking 子项下面,下面这是 Missing Translation 的默认设置:


  我们可以把这一项的 Severity 由 Fatal (致命) 修改为 Ignore(忽略) 或者 Warning(警告),如下图:


  另:关于多语言翻译的问题,有一个问题是值得关注的,例如:《Android翻译多国语言字符串注意事项》。

  二、签名 keystore 的逗号问题

  点击确定,然后重新开始前面的步骤,开始导出,这次可以了,下面是导出的界面,选择你要导出的项目:


  后面就是选择 keystore ,你可以选择已经存在的 keystore 或者新建一个 keystore,我选择新建,输入密码,然后进入下面这个设置界面:


  下一步,最后生成的时候,我们得到这样一个错误:


  Google 一下,找到这么一篇: 《keytool 错误: java.io.IOException: Incorrect AVA format》,stackoverflow 上也有类似的讨论:keytool error :java.io.IoException:Incorrect AVA format ,结论都是一样的,原来原因竟然是因为 “,”(逗号) 被认为是特殊字符,这通常发生在书写 “City or Locality” 时,按我们平时的习惯都会写成 “Beijing, China”,而我也不例外的写成了 “GuangXi, China” ,所以就出错了,找到原因,去掉逗号再试,就 OK 了。

  除了用 Eclipse 以外,还有一种签名方法,就是使用 Keytool 和 Jarsigner 给 app 签名,而这种签名是允许加入这个逗号的,《keytool 错误: java.io.IOException: Incorrect AVA format》 里有提到。

  这里贴一个 keytool 关于特殊字符的说明及用法,摘自:http://www.oschina.net/question/163910_29310,

  特殊字符还包括,加号(+),引号("),斜杠(),大于小于号(< 和 >),分号(;) 等,解决的办法是用 转义符。

时间: 2024-11-08 19:04:06

使用Eclipse给 APK 签名遇到的问题及解决办法的相关文章

使用 Eclipse 给 APK 签名遇到的问题及解决办法

  今天用 APK 反编译工具看了一下自己项目生成的 APK 文件,发现代码并没有混淆,于是设置了用 ProGuard 混淆代码,可是混淆是必须在非 Debug 模式才会生效的,即使你是以 Release 模式来 Run As 启动所生成的 APK 包,依然是没有使用 ProGuard 混淆的.于是决定导出一下 Release 版的 APK,导出分"签名"和"不签名"的两种,都这么做了,当然是要签名一下了,所以遇到了后面这两个问题. 一.strings.xml 的翻

怎么使用 Eclipse 给 APK 签名?

  一.strings.xml 的翻译问题 在你的项目名字上面点鼠标右键,弹出下面的菜单,选择 Android Tools -> Export Signed Application Package... , 然后会看到这么一个提示: 并且得到下面这样的错误描述: 大意是,导出操作因为 Lint Error Checking (检测 Lint 错误) 出现致命错误而退出,请修正这些错误再运行导出,或者在设置里的 Android -> Lint Error Checking 页面里把 "

eclipse无法导入Android工程的问题和解决办法

最近在新导入一个Android工程时遇见了已有工程无法导入的情况.具体的现象就是每次导入时的导入窗口很快消失,而在eclipse的package explorer中却没有增加新导入的工程文件夹,没有其他的错误提示. eclipse工程导入的常见方法 1. File->Import->Existing Android Code into Workspace,弹出导入工程窗口,选择导入工程所在目录. 2.在package explorer窗口中单击右键->New->Project...

MyEclipse/Eclipse的内存优化与内存不足的解决办法

做项目的时候,MyEclipse提示内存不足,我本本内存1G的呀.错误提示大概如下:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to incr

解决在eclipse中将android项目生成apk并且给apk签名的实现方法详解

生成apk最懒惰的方法是: 只要你运行过android项目,到工作目录的bin文件夹下就能找到与项目同名的apk文件,这种apk默认是已经使用debug用户签名的. 如果想要自己给apk签名: 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装). 2.签名的步骤 a.创建key b.使用步骤a中产生

打包-使用eclipse打的apk包忽大忽小,安装后运行程序失败,什么原因?

问题描述 使用eclipse打的apk包忽大忽小,安装后运行程序失败,什么原因? 使用eclipse不混淆打的正式签名apk包忽大忽小,我的apk理论打包是5021K,但是每次打包都不一样,有时是4888K,有时是5006K,始终达不到正常的5021K,安装后运行程序,一闪而过,直接失败,什么原因? 解决方案 你运行失败得查看log. 解决方案二: 应该是eclipse的错误检测吧,好像是有的代码不符合规范.打开eclipse Preferences 选择 Android 下 Lint Erro

md5-AndroidStudio 打包,apk签名不一致

问题描述 AndroidStudio 打包,apk签名不一致 请教以下,AndroidStudio和Java的开发环境不一样,同一个apk生成的keystore 的jks文件是有的,但是生成的签名md5和sha1却不相同.请问一下,怎么才能生成具有相同md5的apk文件,因为apk上架的时候会出现签名不一致的问题. 解决方案 在Android Studio中选择 Build -> Generate Signed APK, 就可以生成签名的APK了 如果已经有keystore文件,选择(Choos

android-关于Android项目二期开发APK签名一样却无法覆盖一期项目的问题

问题描述 关于Android项目二期开发APK签名一样却无法覆盖一期项目的问题 一期项目已经上线,签名文件肯定也是有的,开发工具用的是eclipse.二期项目使用的Android Studio开发的,使用同样的签名打包后(applicationId也是一样的)在已经安装了一期项目的手机上却无法覆盖原有的.为啥啊?是因为android的APK版本?还是因为minSdkVersion的原因呢? 解决方案 按照常理说应该可以啊!回头我试试 解决方案二: 两个不同compiler 创造的apk 都是用不

Android 使用jarsigner给apk签名的方法详细介绍_Android

Android 使用jarsigner给apk签名的方法详细介绍 工作中APP功能完成以后往往需要往应用商店提交一些内容,如商店中存在本公司别的人员提交的APP,往往需要进行认领,应用商店会让开发者下载空的APK,然后使用自己APP的签名文件进行签名,认证,这里简单说一下如何使用jarsigner命令进行签名. 该arsigner命令在jdk中可以找到, 简单说明一下具体参数: -verbose:签名命令标识符. -keystore:后面跟着的是你签名使用的密钥文件(keystore)的绝对路径