加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_潮州站长网 (http://www.0768zz.com/)- 物联安全、建站、操作系统、云计算、数据迁移!
当前位置: 首页 > 教程 > 正文

Android PackageInstaller 静默安装的达成

发布时间:2021-12-18 13:37:18 所属栏目:教程 来源:互联网
导读:
要求在安装APK应用时不显示权限信息和安装过程。
Google的安全策略要求任何应用应该提示APK安装包的权限,对于一些内置特定厂商应用,可以跳过安装过程的信息加快安装,或者运营商强制安装。
 
这个功能的实现在src/package/app/PackageInstaller中,需要修改。添加静默安装的功能。又兼容正常安装。
 
实现的分析
 
在窗口中点击一个APK时,触发单击事件,PackageInstaller接收系统服务PackageManagerService传来的intent信息,传来的Intent信息中有APK的一些参数。实现的关键是区分一般APK和特定APK。
 
通过传给PackageManagerService的intent中添加特别的参数,PackageInstaller接收后进行判断,进行特别的隐藏安装流程。这个实现只能通过程序调用的方式安装。
 
安装过程的信息窗口在PackageInstallActivity.java中实现的。安装过程的信息窗口有4个:需要实现一个PakkageInstallActivityHide.JAVA的文件,去掉下面的dialog和窗口
 
安装权限确认窗口:installPermissionConfirm
 
安装进度条:installProgress
 
安装结果窗口:installResult
 
安装错误提示对话框
 
文件列表大概如下:
 
InstallAppProgress.java
 
PackageInstallerActivity.java
 
+PackageInstallerActivityHide.java
 
PackageUtil.java  
 
UninstallAppProgress.java
 
UninstallerActivity.java
 
+UninstallerActivityHide.java
 
具体实现
 
1 在Androidmainfest.xml声明一个特定的intent:android.intent.action.VIEW.HIDE,由PackageInstallActivityHide.java来接受
 
注意这里的两点:
 
 
把原先的 <application android:label="@string/app_name" android:theme="@android:style/Theme.Holo.DialogWhenLarge">
改成  <application android:label="@string/app_name">,
把android:theme="@android:style/Theme.Holo.DialogWhenLarge"主题的显示放在每一个<activity 中,兼容正常按装的UI主题不变
 
隐藏安装的PakkageInstallActivityHide <activity的主题只能是:
android:theme="@android:style/Theme.NoDisplay" 只能是这个,没有窗口
内容如下:
 
<application android:label="@string/app_name">
 
<activity android:name=".PackageInstallerActivity" android:theme="@android:style/Theme.Holo.DialogWhenLarge" android:configChanges="orientation|keyboardHidden">  
<intent-filter>  
<action android:name="android.intent.action.VIEW"/>  
<category android:name="android.intent.category.DEFAULT"/>  
<data android:scheme="content"/>  
<data android:scheme="file"/>  
<data android:mimeType="application/vnd.android.package-archive"/>  
</intent-filter>  
</activity>  
 
<activity android:name=".PackageInstallerHideActivity" android:theme="@android:style/Theme.NoDisplay" android:configChanges="orientation|keyboardHidden">  
<intent-filter>  
<action android:name="android.intent.action.VIEW.HIDE"/>  
<category android:name="android.intent.category.DEFAULT"/>  
<data android:scheme="content"/>  
<data android:scheme="file"/>  
<data android:mimeType="application/vnd.android.package-archive"/>  
</intent-filter>  
</activity>  
 
<activity android:name=".UninstallerActivityHide" android:theme="@android:style/Theme.NoDisplay" android:configChanges="orientation|keyboardHidden" android:excludeFromRecents="true">  
<intent-filter>  
<action android:name="android.intent.action.VIEW"/>  
<action android:name="android.intent.action.DELETE.HIDE"/>  
<category android:name="android.intent.category.DEFAULT"/>  
<data android:scheme="package"/>  
</intent-filter>  
</activity>  
 
2 实现PakkageInstallActivityHide.java,UninstallerActivityHide.java。 只需把PakkageInstallActivity.java修改去掉dialog和对话框。
 
3 安装程序调用者发一个上面定义的intent即可。如下例子,静默安装/sdcard/hello.apk
 
卸载的方法类似。
 
Intent install_hide_intent = new Intent("android.intent.action.VIEW.HIDE");
install_hide_intent .setDataAndType(Uri.parse("file:///sdcard/hello.apk"),
"application/vnd.android.package-archive");  
startActivityForResult(install_hide_intent, INSTALL_RUSULT);
4 注意,这个方法需要PackageInstall这个apk必须与系统一起编译。这个apk在/system/app/目录下面;android.intent.action.VIEW.HIDE 这个静默安装的接口需要开放给第三方。

(编辑:我爱制作网_潮州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读