最近在做一个软件管理的东西, 最初是用 Intent 调用系统安装程序实现的.
因为系统的会有相关的提示, 不太直接.
所以想自己写一个 安装apk 的代码出来
上网找了不少资料, 用过两种方法实现
1) 用 PackageManager.installPackage()方法
    但这个方法不是所有sdk都有, 1.6以上的没找到有. 只在1.5里能使用
2) 用 Runtime.getRuntime().exec()方法
   通过 执行 pm -install 来安装这两种方法都需要获得  android.permission.INSTALL_PACKAGES 这个权限
加此权限到 AndroidManifest.xml后 在android源代码 创建项目 并 在Android.mk 文件加上 certification = platform 后编译成功.可是 在 模拟器 上测试通过 能获取到 INSTALL_PACKAGES权限
但在我自用的测试机调试时 提示 not granting android.permission.INSTALL_PACKAGES. 
这到底是什么原因. 请各位大侠帮忙看看..

解决方案 »

  1.   

    看看你的phone的setting里面,application中(好像是的,不太肯定)有个允许安装外来资源之类的选项,看是否开启?
      

  2.   

    你没有手机的root权限...
    adb shell之后看到的是"$"
    模拟器上看到的是“#"
      

  3.   


    我在模拟器看到的是 # 没错..
    请问 $ 跟 # 有什么区别.
    是不是程序要有root权限才可以?
      

  4.   


    但我使用 Intent 系统安装APK程序时 也能正常使用. 无论是 模拟器还是真机.
      

  5.   


    加上system权限 可能会行. 但我还需要访问sdcard资料.
    加了system权限后是不能访问scard资料的.
      

  6.   

    我个人认为应该是 编译方法的问题...因为我就算源代码中 PackageInstaller 改个包名 用mm编译完之后也不能在真机上用
    也是出同样的错误.有没有人知道 应该怎么编译才正确呢.
      

  7.   

    从字面意思看是没有获得到android.permission.INSTALL_PACKAGES这个权限。1. 编译问题
    真机上面会检查一个标记的信息,密码是什么一般都不告诉别人的,所以一般来说系统的程序都需要编译整个source code,然后将自己编译的system.img重烧到手机中。建议不要下mm了,直接make一遍也是比较快的了,反正只是编译一个应用。2. Install问题
    看了PackageInstaller,它也最终调用的是PackageManager进行安装程序的。
    权限的话,也只是在manifest里面加了
    <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
    差不多可以肯定的是代码是没什么问题的。3. 如果说楼主的程序在模拟器机上面可以跑,最好确认下真机是否是通过google cts测试的手机,并且确认下它没有太多的修改framework的代码。要不然,可能是android.permission.INSTALL_PACKAGES所对应的位置id与原始代码中的位置不一样,导致用源码环境编译出来的apk无法在真机上面使用。建议:
    1. 确认是否能获得root权限。
    2. 如果可以,那么到真机的/data/system/下把,packages.xml拉出来看看对应设置是什么样的。希望对你有用,中午写个小程序验证下,再来下结论。
      

  8.   


    我用G2来测试, 不知道是不是 是否通过google cts测试的手机.
    我也没有修改过framework的代码, 运行代码时 只提示 调用该方法需要 INSTALL_PACKAGES权限而已我的手机是没有获得root权限的, 主要是我用过eoeMarket是可以直接安装的, 在我的机子上同样可以.
    所以我认为不会是手机root权限的问题, 我也是看到人家可以实现, 我才想做这个功能出来而已.
      

  9.   

    试了下  把apk放到/system/app/  就没有权限问题了
      

  10.   

    但普通的用户 不可能都开了root权限, 这样不太合理.
    能不能一安装完 就放在system/app里, 而不是 data/app里.
      

  11.   

     
    想请问下 如何把apk放到/system/app/  
    这个文件夹的权限是
    drwxr-xr-x没有往里写的权限啊
      

  12.   

    你没有手机的root权限...
    adb shell之后看到的是"$"
    模拟器上看到的是“#"
      

  13.   

    玩android的人都开了root了吧。。否则怎么用?
      

  14.   

    使用com.android.ddmlib.IDevice.installPackage(String packageFilePath, boolean reinstall) 安装apk文件,不过原理跟Runtime.getRuntime().exec()执行命令行一个道理,LZ所说的权限不够问题,我觉得是不是你传到android系统中的位置不对啊?可以尝试一下上传到SDCard上,目录应该是system/sdcard,这个目录下的权限应该符合你的要求某做的也是调用android sdk的内容安装、管理和运行apk,没有问题,lz可以再试试
      

  15.   


    没错..原理是一样的...开通 system.uid的话 是没有权限访问sdcard内容的. 网上也有说明