当前位置:编程学习 > wap >>

直接 安装apk文件 实现方法

最近在做一个软件管理的东西, 最初是用 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. 
这到底是什么原因. 请各位大侠帮忙看看.. --------------------编程问答-------------------- --------------------编程问答-------------------- 学习... --------------------编程问答-------------------- 关注一下! --------------------编程问答-------------------- 学习之~ --------------------编程问答-------------------- 看看你的phone的setting里面,application中(好像是的,不太肯定)有个允许安装外来资源之类的选项,看是否开启? --------------------编程问答-------------------- 你没有手机的root权限...
adb shell之后看到的是"$"
模拟器上看到的是“#" --------------------编程问答--------------------
引用 6 楼 zhengkarl 的回复:
你没有手机的root权限...
adb shell之后看到的是"$"
模拟器上看到的是“#"


我在模拟器看到的是 # 没错..
请问 $ 跟 # 有什么区别.
是不是程序要有root权限才可以? --------------------编程问答--------------------
引用 5 楼 hero_cat 的回复:
看看你的phone的setting里面,application中(好像是的,不太肯定)有个允许安装外来资源之类的选项,看是否开启?


但我使用 Intent 系统安装APK程序时 也能正常使用. 无论是 模拟器还是真机. --------------------编程问答--------------------
引用 7 楼 hutter001 的回复:
引用 6 楼 zhengkarl 的回复:
你没有手机的root权限...
adb shell之后看到的是"$"
模拟器上看到的是“#"


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


你给程序再加个系统权限试试。让你的程序运行在system id下。

帮顶 --------------------编程问答-------------------- 顶帖
。。。。。 --------------------编程问答-------------------- 關注。。。。。。。。。。 --------------------编程问答--------------------
引用 9 楼 lily2005lucky 的回复:
引用 7 楼 hutter001 的回复:

引用 6 楼 zhengkarl 的回复:
你没有手机的root权限...
adb shell之后看到的是"$"
模拟器上看到的是“#"


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


你给程序再加个系统权限试试。让你的程序运行在system id下。

帮顶
……


加上system权限 可能会行. 但我还需要访问sdcard资料.
加了system权限后是不能访问scard资料的.
--------------------编程问答-------------------- --------------------编程问答-------------------- 我个人认为应该是 编译方法的问题...

因为我就算源代码中 PackageInstaller 改个包名 用mm编译完之后也不能在真机上用
也是出同样的错误.

有没有人知道 应该怎么编译才正确呢. --------------------编程问答--------------------
引用 14 楼 hutter001 的回复:
我个人认为应该是 编译方法的问题...

因为我就算源代码中 PackageInstaller 改个包名 用mm编译完之后也不能在真机上用
也是出同样的错误.

有没有人知道 应该怎么编译才正确呢.

顶! --------------------编程问答-------------------- --------------------编程问答-------------------- 从字面意思看是没有获得到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拉出来看看对应设置是什么样的。

希望对你有用,中午写个小程序验证下,再来下结论。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 17 楼 yyy025025025 的回复:
从字面意思看是没有获得到android.permission.INSTALL_PACKAGES这个权限。

1. 编译问题
真机上面会检查一个标记的信息,密码是什么一般都不告诉别人的,所以一般来说系统的程序都需要编译整个source code,然后将自己编译的system.img重烧到手机中。

建议不要下mm了,直接make一遍也是比较快的了,反正只是编译一个应用。

2. Ins……


我用G2来测试, 不知道是不是 是否通过google cts测试的手机.
我也没有修改过framework的代码, 运行代码时 只提示 调用该方法需要 INSTALL_PACKAGES权限而已

我的手机是没有获得root权限的, 主要是我用过eoeMarket是可以直接安装的, 在我的机子上同样可以.
所以我认为不会是手机root权限的问题, 我也是看到人家可以实现, 我才想做这个功能出来而已. --------------------编程问答-------------------- 试了下  把apk放到/system/app/  就没有权限问题了 --------------------编程问答-------------------- 但普通的用户 不可能都开了root权限, 这样不太合理.
能不能一安装完 就放在system/app里, 而不是 data/app里. --------------------编程问答--------------------
引用 20 楼 yyy025025025 的回复:
试了下  把apk放到/system/app/  就没有权限问题了

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

没有往里写的权限啊 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 不错。顶了 --------------------编程问答-------------------- 顶


顶 --------------------编程问答-------------------- 还需努力,加强加强吧 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习下 --------------------编程问答-------------------- --------------------编程问答-------------------- 前来学习~ --------------------编程问答-------------------- 学习学习。 --------------------编程问答-------------------- 在linux下的吗? --------------------编程问答-------------------- 内容存入剪贴板 --------------------编程问答-------------------- 学习了,学习了………… --------------------编程问答-------------------- 顶,学习中 --------------------编程问答-------------------- 学习中,,,,, --------------------编程问答-------------------- 学习了哦  呵呵呵呵呵哈哈哈哈哈哈 --------------------编程问答-------------------- 学习学习 --------------------编程问答-------------------- --------------------编程问答-------------------- 看来问题还没有解决。还有待加强学习啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 兴趣,兴趣是最好的老师 --------------------编程问答-------------------- 好网站,谢谢。 --------------------编程问答-------------------- 要好啊好哦学习。 --------------------编程问答-------------------- 学习了
--------------------编程问答-------------------- 看一下! --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了。。谢谢 --------------------编程问答-------------------- 关注一下,学习一下!!! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 恩 很不错 --------------------编程问答-------------------- 学习一下
--------------------编程问答-------------------- 收藏,学习! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 回复学习! --------------------编程问答-------------------- 赚积分的来了。 --------------------编程问答-------------------- 楼主V5!!!!! --------------------编程问答-------------------- --------------------编程问答-------------------- 不错,顶个 --------------------编程问答-------------------- 纯帮顶,赚分来了~~ --------------------编程问答--------------------
引用 22 楼 zengyangtech 的回复:
引用 20 楼 yyy025025025 的回复:

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

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

没有往里写的权限啊


唉,关键部分,版主大人在哪里啊? --------------------编程问答-------------------- 这样实现的吗? --------------------编程问答-------------------- 啥么情况? --------------------编程问答-------------------- d
i
n
g --------------------编程问答-------------------- 赚分的 --------------------编程问答-------------------- 你没有手机的root权限...
adb shell之后看到的是"$"
模拟器上看到的是“#" --------------------编程问答-------------------- 这是个问题,值的思考下,开放的系统也是有版权的啊
--------------------编程问答-------------------- 顶帖
。。。。。 --------------------编程问答-------------------- 关注一下 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- ghgfhnfghngf --------------------编程问答-------------------- 学习下 --------------------编程问答-------------------- --------------------编程问答-------------------- 玩android的人都开了root了吧。。。。。否则怎么用? --------------------编程问答-------------------- 关注下 --------------------编程问答-------------------- 太棒了!!!!!!哈哈哈哈啊哈
--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 定了,好东西大家分享 --------------------编程问答-------------------- 这个确实不是很懂·帮顶了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 记号一个 --------------------编程问答-------------------- 学习一下,写得不错 --------------------编程问答-------------------- 谢谢分享 --------------------编程问答-------------------- 看不懂呀 怎么班 --------------------编程问答-------------------- 使用com.android.ddmlib.IDevice.installPackage(String packageFilePath, boolean reinstall) 安装apk文件,不过原理跟Runtime.getRuntime().exec()执行命令行一个道理,LZ所说的权限不够问题,我觉得是不是你传到android系统中的位置不对啊?

可以尝试一下上传到SDCard上,目录应该是system/sdcard,这个目录下的权限应该符合你的要求

某做的也是调用android sdk的内容安装、管理和运行apk,没有问题,lz可以再试试 --------------------编程问答--------------------
引用 93 楼 salever 的回复:
使用com.android.ddmlib.IDevice.installPackage(String packageFilePath, boolean reinstall) 安装apk文件,不过原理跟Runtime.getRuntime().exec()执行命令行一个道理,LZ所说的权限不够问题,我觉得是不是你传到android系统中的位置不对啊?

可以尝试一下上传到SDCard上,目录应该……


没错..原理是一样的...开通 system.uid的话 是没有权限访问sdcard内容的. 网上也有说明 --------------------编程问答-------------------- 没解决也放到精华了,有没有搞错,老子很生气 --------------------编程问答-------------------- 不错,学习了下!
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,