Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Install_软件包将APK安装为系统应用程序_Android_Android Source_Android Package Managers_Android Install Apk - Fatal编程技术网

Android 使用Install_软件包将APK安装为系统应用程序

Android 使用Install_软件包将APK安装为系统应用程序,android,android-source,android-package-managers,android-install-apk,Android,Android Source,Android Package Managers,Android Install Apk,我开发了一个应用程序,该应用程序以系统权限运行(内置在AOSP映像中),并且具有安装包权限 我的目标是在后台静默安装APK,而无需用户交互。我读过关于stackoverflow的不同方法,但大多数方法要么已经过时,要么根本不起作用 例如,如果我尝试使用PackageManager(通过反射或通过在我的应用程序中作为shell命令运行),我会遇到以下错误,这就是我当前遇到的问题 11-20 19:06:10.999 4965 4965 D AndroidRuntime: >>>

我开发了一个应用程序,该应用程序以系统权限运行(内置在AOSP映像中),并且具有安装包权限

我的目标是在后台静默安装APK,而无需用户交互。我读过关于stackoverflow的不同方法,但大多数方法要么已经过时,要么根本不起作用

例如,如果我尝试使用PackageManager(通过反射或通过在我的应用程序中作为shell命令运行),我会遇到以下错误,这就是我当前遇到的问题

11-20 19:06:10.999  4965  4965 D AndroidRuntime: >>>>>> START 

com.android.internal.os.RuntimeInit uid 10039 <<<<<<
11-20 19:06:11.199  4965  4965 D AndroidRuntime: Calling main entry com.android.commands.pm.Pm
11-20 19:06:11.268  4965  4965 E Pm      : Error
11-20 19:06:11.268  4965  4965 E Pm      : java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AppOpsManager.checkPackage(int, java.lang.String)' on a null object reference
11-20 19:06:11.268  4965  4965 E Pm      :  at android.os.Parcel.readException(Parcel.java:2010)
11-20 19:06:11.268  4965  4965 E Pm      :  at android.os.Parcel.readException(Parcel.java:1950)
11-20 19:06:11.268  4965  4965 E Pm      :  at android.content.pm.IPackageInstaller$Stub$Proxy.createSession(IPackageInstaller.java:254)
11-20 19:06:11.268  4965  4965 E Pm      :  at com.android.commands.pm.Pm.doCreateSession(Pm.java:607)
11-20 19:06:11.268  4965  4965 E Pm      :  at com.android.commands.pm.Pm.runInstall(Pm.java:431)
11-20 19:06:11.268  4965  4965 E Pm      :  at com.android.commands.pm.Pm.run(Pm.java:150)
11-20 19:06:11.268  4965  4965 E Pm      :  at com.android.commands.pm.Pm.main(Pm.java:107)
11-20 19:06:11.268  4965  4965 E Pm      :  at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
11-20 19:06:11.268  4965  4965 E Pm      :  at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)
11-20 19:06:11.270  4965  4965 I app_process: System.exit called, status: 1
11-20 19:06:11.270  4965  4965 I AndroidRuntime: VM exiting with result code 1.

我们使用以下代码:

Uri apkUri = Uri.fromFile(apkFile);
IPackageInstallObserver observer = null;
String installerPackageName = "MyInstaller";
getPackageManager().installPackage(apkUri, observer, PackageManager.INSTALL_REPLACE_EXISTING, installerPackageName);

它已被弃用,但即使在Android 8.1上也能正常工作。

您能分享启动安装所用的代码吗?@Sature9Nine我在AOSP源代码中使用了与软件包安装程序应用相同的代码,这意味着获得一个PackageInstaller对象并打开一个会话,您将试用它并返回给您-谢谢!我是否必须遵循特定的渐变设置才能执行此操作?My Android Studio不解析installPackage()方法如果您正在构建一个具有系统权限的Android应用程序,并将其与系统映像捆绑在一起,则必须使用平台密钥进行签名,并且几乎可以肯定,它是通过安卓.mk make文件与Android平台的其余部分一起构建的,而不是使用gradle。这使您可以访问
@hide
方法。在平台构建系统之外访问
@hide
方法很困难(但并非不可能)。
Uri apkUri = Uri.fromFile(apkFile);
IPackageInstallObserver observer = null;
String installerPackageName = "MyInstaller";
getPackageManager().installPackage(apkUri, observer, PackageManager.INSTALL_REPLACE_EXISTING, installerPackageName);