欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2023-11-16 20:10:40
使用 Eclipse 给 APK 签名遇到的问题及解决方法...

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

一、strings.xml 的翻译问题

  在你的项目名字上面点鼠标右键,弹出下面的菜单,选择 android tools -> export signed application package... ,

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

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

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

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

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

大意是,导出操作因为 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 的默认设置:

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

我们可以把这一项的 severity 由 fatal (致命) 修改为 ignore(忽略) 或者 warning(警告),如下图:

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

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

二、签名 keystore 的逗号问题

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

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

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

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

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

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

google 一下,找到这么一篇: 《keytool 错误: java.io.ioexception: incorrect ava format》,* 上也有类似的讨论: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,

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

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