在使用real210开发板时可能会遇到这个问题,realarmTest.apk无法通过adb、手机助手、从SD卡安装。
用adb方式安装时出现这样的错误Failure [INSTALL_FAILED_INVALID_INSTALL_LOCATION]
用手机助手和从SD安装时是无法发送和无法安装的错误。
这样安装不行的原因是,realarmTest.apk是要使用系统权限,android对于底层调用比较严格,所以这个apk无法使用常规方法安装。
解决方法是不使用adb install命令安装,换成adb push命令安装,adb push命令格式为:adb push 要发送的文件名 开发板的文件目录,要实现安装需要push到system/app目录下。
举例说:加入在pc端当前目录下要发送realarmTest.apk文件,那么命令是adb push realarmTest.apk /system/app,发送完成后,android系统会自动安装这个应用。
相对于adb install安装这里只是改成了adb push方式,并没有增加什么工作量。
下面说下两种编译这个realarmTest.apk目标文件的方法。
一个是在原目录树下使用mm命令编译。关于mm命令参考博客http://blog.csdn.net/wang_shuai_ww/article/details/21379403
realarmTest.apk的源码在源目录树下/packages/apps/realarmTest,首先进入该源码目录,cd /packages/apps/realarmTest然后使用mm命令进行编译即可,编译完成后会在out/target/product/generic/system/app/这个路径下生成需要的apk文件。
如果你用的是没有动过的源码,那么out/target/product/generic/system/app/这个路径下应该会有两个文件,一个.apk一个是.odex文件,用资源管理器打开apk时发现里面缺少文件classes.dex,当然了这个apk也是无法安装的。
解决方式是,打开/build/core/package.mk文件找到这一行LOCAL_DEX_PREOPT := true,然后修改成LOCAL_DEX_PREOPT := false即可,重新编译即可得到我们需要的完整apk了(注意要删除out/target/product/generic/system/app目录下之前的apk文件,否则不会生成新的完整apk的)。
另外 一个方法就是使用eclipse来进行编译了
该方法能够通过编译,但是安装后显示是不太正常的,推荐使用上一中方法。
这里贴上显示问题的图片:
另外使用该方法还需要使用系统签名工具,所以挺麻烦的,用mm命令在目录树下编译还方便些。
下面给出在eclipse下搭建该工程以及设置,并解决上面的显示问题。
首先找到该realarmTest.apk源码,位置/packages/apps/realarmTest,把realarmTest整个目录拷贝到用户的目录,然后打开eclipse使用file->import命令选择导入android外部的代码工作目录,如下图:
然后浏览到刚才拷贝的源码目录点击finish即可。
添加完成后eclipse应该会创建一些其他的folder,其中有一个是我们工程不需要的如下图所示,并按照下图所示的操作把该folder删除,不删除会报错
之后就可以编译了。完成后在realarmTest/bin下就有打包的apk文件了,当然这个apk是不能使用的,对android工程的AndroidManifest.xml这个文件需要修改,添加一行代码,如下图所示
即添加<supports-screens android:largeScreens="true"/>这一行,原因是开发板的屏幕在android看来属于高分辨率,所以这里的largeScreens属性设置为true,那么android系统就会正确识别图片并能按预定的比例正确显示了。
修改完成后,重新编译,在bin目录下得到apk文件。前面说了,该apk需要系统权限,所以需要进行系统签名才可正常使用。下面说明怎么对这个apk进行系统签名。
要用到的工具为signapk.jar位置在/out/host/linux-x86/framework/。有了这工具我们还需要两个签名文件platform.pk8和platform.x509.pem,位置在build\target\product\security然后把要签名的apk、签名工具、platform.pk8和platform.x509.pem都放到一个目录下,在终端输入命令:java -jar signapk.jar platform.x509.pem platform.pk8 ./realarmTest.apk ./realarmTest_sign.apk即可完成签名,得到的realarmTest_sign.apk即可通过push命令安装在开发板上了。
为了方便我做了一个文件和一个脚本,在终端直接运行脚本即可在我做的这个文件夹下得到签名后的apk,如果连接了开发板的话,把该脚本的最后一行打开即可直接安装。
文件下载地址为:http://yunpan.cn/QIsqBv2vbXIqz
当出现这个提示时:Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.请检查下图所示部分是否删除: