Android是否可以实现静默安…
来源:互联网 发布:java日志级别大小 编辑:程序博客网 时间:2024/05/22 08:10
(1)在网上搜寻该问题的解决方法,且查阅android开发文档,没有发现可以实现该功能的显示API调用,网络上很多人请教同样的问题,但都没有能够实现解答;说是android为了用户的安全,已屏蔽该实现该方法的功能,第三方法应用是无法实现静默安装的。
android.content.pm.PackageManager.installPackage(Uri packageURI,IPackageInstallObserver observer, int flags, StringinstallerPackageName)进行安装应用程序,在InstallAppProgress中得到的PackageManager是通过PackageManagerpm =getPackageManager()得到的,得到的对象是一个android.app.ContextImpl.ApplicationPackageManage
ApplicationPackageManage
ApplicationPackageManage
其installPackage方法为
可见调用的installPackage方法为IPackageManager.installPackage(packageURI, observer, flags,installerPackageName);
在ContextImpl中,由IPackageManager pm =ActivityThread.getPackageManager()获得IPackageManager实例对象;在ActivityThread.getPackageManager()方法中,
static IPackageManager sPackageManager;
最终得到的installPackage确实是IPackageManager.installPackage方法;
因为class PackageManagerService extendsIPackageManager.Stub所以IPackageManager.installPackage调用的是:PackageManagerService.java(frameworks/base/services/java/com/android/server)文件中的
(这里不明白为何IPackageManager.installPackage方法调用的是PackageManagerService.java,只是在网上的一篇文章中它给出了上面的原因,因为classPackageManagerService extendsIPackageManager.Stub,我不明白,但也找不到其他的函数,通过PackageManagerService.java的源码,可以看出它确实是进行应用程序安装的,所以应该可以确定最终调用的方法就是
PackageManagerService.installPackage(final Uri packageURI, finalIPackageInstallObserver observer, final int flags))
于是考虑如何得到PackageManagerService.installPackage(),考虑通过反射的方法得到installPackage(),但其中难以得到的是其参数中的IPackageInstallObserver类型,IPackageInstallObserver是由aidl文件定义的,通过aidl文件的特性,将IPackageInstallObserver.aidl文件拷到本地程序中,可以得到类IPackageInstallObserver.calss,通过它反射出installPackage()方法,但在invoke该方法时,却无法得到IPackageInstallObserver的实例对象,IPackageInstallObserver的实例对象必须通过
IPackageInstallObserver.Stub.asInterface(IBinderbinder)方式得到,无法得到与其绑定的IBinder对象,因而无法执行反射出来的方法;另外PackageManagerService.installPackage()似乎是不能被第三方应用程序执行的,有权限的限制,这从下面的实例中似乎可以得到证实。
"download/Shuffle-1.6.3.apk")); 进行安装,这个命令的执行在com.android.commands.pm.Pm中,直接调用IPackageManager.installPackage(Uri.fromFile(newFile(apkFilePath)), obs,installFlags,installerPackageName)方法,在此方法中,
IPackageManager mPm;
mPm =IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
且class PackageManagerService extends IPackageManager.Stub
所以IPackageManager.installPackage调用的是:PackageManagerService.java(frameworks/base/services/java/com/android/server)文件中的
在此方法执行中会出现 Not granting permissionandroid.permission.DELETE_PACKAGES错误,这应该是该权限不能授给第三方应用,因而在程序中不能执行,与android中普通安装应用程序最终调用的方法是相同的,但是却对第三方应用是没有权限执行的。。
(4) 另外解决思路:
肯定会有一定的权限限制。
- Android是否可以实现静默安…
- Android是否可以实现静默安装模式
- Android是否可以实现静默安装模式
- Android是否可以实现静默安装模式
- Android是否可以实现静默安装模式
- Android是否可以实现静默安装模式
- Android是否可以实现静默安装模式
- Android静默方式实现批量安…
- 静默安装apk的方法--Android是否可以实现静默安装模式
- 安卓自动更新,静默更新,替换友盟更新可以在通知栏里显示更新下载进度,几行代码快速实现Android下载更新
- Android 实现静默安装
- android实现静默升级
- android静默开机实现
- Android实现静默卸载
- android实现静默卸载和静默安装
- Android静默安装的实现
- android 实现静默安装、卸载
- android静默安装的实现
- 解决android textview自动换…
- 1.00768E7字符串如何转成long型
- Properties java 读写文件类用法
- android aidl服务与Binder invocat…
- android Bitmap用法总结
- Android是否可以实现静默安…
- 从Service或者是BroadcastReceiver…
- 自由独立
- 动画(Animation) 之 (闪烁、左右摇…
- 探秘腾讯Android手机游戏平台之不…
- Java时间处理(xx天前、xx年前)
- java 冒泡排序
- android 再按一次后退键退出应用程…
- Android应用软件开发如何盈利