android 用户应用使用系统权限如reboot的permission办法 包括顺利安装到手机上INSTALL_FAILED_INVALID_INSTALL_LOCATION

昨天搞了setCurrentTimeMillis 不能修改时间的问题。不甘心今天上午又搞上了。

主要原因是因为SystemClock的setCurrentTimeMillis 的permission是signatureOrSystem等级的,直接使用user-permission没有作用。需要做两方面的事情:

一方面是相同的uid. Android 的系统用户id是android.uid.system , 在Manifest里面添加android:sharedUserId="android.uid.system"。

二方面是相同的包签名。包签名需要用到android提供的signapk,但很遗憾,我们的开发包里面并没有,需要您手动的从源码里面编译,在2.2的版本中,源码路径是:froyo\build\tools\signapk。
在附件中我已经编译好了。然后从源码路径froyo\build\target\product\security中取出两个系统签名文件platform.pk8 and platform.x509.pem.
就可以对eclipse编译好的apk签名了,(注: 编译好的apk在bin目录下)。形式是:
Java –jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk.

完成这两部后,在运行之前,您还要从模拟器上卸载掉原来的相同程序,因为签名改了,不然会报错不能安装。

安装完后您就可以使用了。

在安装的时候可能会遇到安装补上

INSTALL_FAILED_INVALID_INSTALL_LOCATION   出先这个错误   

在添加系统权限的时候报错 可以 clean 工程 



此时 要把 我们的 apk 放入对应的系统包里面。


操作步骤
1.     将你的手机数据线,插上,把你的设备设置为允许usb调试
2.     打开命令终端cmd
3.     输入命令        adb  shell
4.     确定能进入系统
5.     输入命令      mount
6.     因为system默认是只读文件夹,所以根据上面的提示输入下面命令,使其变为可读写
mount  -o  remount  /dev/block/nandd /system   (图)
7.     为确保万一,再出输入      mount      查看system和上面的不一样了,说明正确
8.     输入        exit   退出android系统终端
9.     进入你存有apk的文件夹,找到你的apk文件备份,右键解压,进入查看lib/armeabi文件夹下有没有*.so文件,如果没有这种库文件的话,直接跳到第“12”步,进行操作,(因为有些apk文件是要调用动态链接库的,你不拷贝的话,就没有办法运行!会报错
)如果有的话,如下图:
10.  将这些*.so文件都拷贝到/system/lib文件夹下
命令:adb  push  libiReader_txtparser.so  system/lib
11.  拷贝完了之后呢,要给这些库文件添加权限,看看别的库文件权限是几
chmod   644  xxxxx.so  
12.  将你的apk文件拷贝进入/system/app(该文件夹里存放着所以系统级别的apk),图中我是将iReader.apk拷贝过去的
13.  再次进入android终端           adb shell
14.  进入system/app文件夹         cd  system/app
15.  查看其他apk的权限            ll         能看出区别
16.  修改iReader.apk权限使其和其他的一样chmod 644 iReader.apk
17.  搞定这些之后,重启设备         reboot
18.  看看系统里面是不是安装好了该应用,点击一下,看是否正常运行,可以的话,再检测是否无法卸载! 


实测 可行---------------------------------》

参考文献

http://www.apkbus.com/android-130756-1-1.html

http://lyxh-2003.iteye.com/blog/739445

你可能感兴趣的:(Android)