无法从 /system/app 以编程方式安装具有 INSTALL_PACKAGES 权限的应用程序
我正在尝试以编程方式安装应用程序而无需用户交互,但出现此错误
SecurityException: Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES
我的安装程序位于 root 手机上的 /system/app 中,选中“安装非市场应用程序”,安装程序具有权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
这是我的呼叫功能
private void puk(Context context) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
String fileName = PAKAGE_FILE_NAME ;
String dir_type = Environment.DIRECTORY_DOWNLOADS;
File dir= Environment.getExternalStoragePublicDirectory(dir_type);
java.io.File file = new java.io.File(dir ,fileName);
Uri packageUri = Uri.fromFile(file);
PackageManager pm = context.getPackageManager();
Class<? extends PackageManager> o = pm.getClass();
Method[] allMethods=o.getMethods();
for (Method m : allMethods) {
if (m.getName().equals("installPackage")) {
Log.e(TAG, "installing the app.." );
m.invoke(pm,new Object[] { packageUri, null, 1, "com.mic.zapp"});
break;
}
}
}
我收到此错误
11-15 02:46:23.320: W/System.err(10848): java.lang.reflect.InvocationTargetException
11-15 02:46:23.330: W/System.err(10848): at java.lang.reflect.Method.invokeNative(Native Method)
11-15 02:46:23.330: W/System.err(10848): at java.lang.reflect.Method.invoke(Method.java:507)
11-15 02:46:23.330: W/System.err(10848): at com.mic.pvtapi.PvtApiReflectActivity.puk(PvtApiReflectActivity.java:56)
11-15 02:46:23.330: W/System.err(10848): at com.mic.pvtapi.PvtApiReflectActivity.onCreate(PvtApiReflectActivity.java:28)
11-15 02:46:23.330: W/System.err(10848): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-15 02:46:23.330: W/System.err(10848): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
11-15 02:46:23.330: W/System.err(10848): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
11-15 02:46:23.330: W/System.err(10848): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
11-15 02:46:23.330: W/System.err(10848): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
11-15 02:46:23.330: W/System.err(10848): at android.os.Handler.dispatchMessage(Handler.java:99)
11-15 02:46:23.330: W/System.err(10848): at android.os.Looper.loop(Looper.java:130)
11-15 02:46:23.330: W/System.err(10848): at android.app.ActivityThread.main(ActivityThread.java:3835)
11-15 02:46:23.330: W/System.err(10848): at java.lang.reflect.Method.invokeNative(Native Method)
11-15 02:46:23.330: W/System.err(10848): at java.lang.reflect.Method.invoke(Method.java:507)
11-15 02:46:23.330: W/System.err(10848): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
11-15 02:46:23.330: W/System.err(10848): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
11-15 02:46:23.330: W/System.err(10848): at dalvik.system.NativeStart.main(Native Method)
11-15 02:46:23.330: W/System.err(10848): Caused by: java.lang.SecurityException: Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES.
11-15 02:46:23.340: W/System.err(10848): at android.os.Parcel.readException(Parcel.java:1322)
11-15 02:46:23.340: W/System.err(10848): at android.os.Parcel.readException(Parcel.java:1276)
11-15 02:46:23.340: W/System.err(10848): at android.content.pm.IPackageManager$Stub$Proxy.installPackage(IPackageManager.java:2037)
11-15 02:46:23.340: W/System.err(10848): at android.app.ContextImpl$ApplicationPackageManager.installPackage(ContextImpl.java:2613)
我已读到 ti 可以通过两种方式获得 INSTALL_PAKAGES 权限:使用固件密钥签署应用程序或将应用程序放入固件中。我的应用程序从 /system/app 运行,因此它必须获得权限。
有人知道出了什么问题并给我一些提示吗?谢谢
编辑:
前进一步,后退两步
我向应用程序添加了新的权限
<permission
android:name="com.mic.pvtapi.permission.INS_AP"
android:label="etichetta_perm"
android:protectionLevel="signatureOrSystem" />
<uses-permission android:name="com.mic.pvtapi.permission.INS_AP"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
,不再出现错误
Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES
,但新的权限
11-15 19:43:58.895: I/ActivityManager(1838): Displayed com.mic.pvtapi/.PvtApiReflectActivity: +421ms
11-15 19:43:58.955: D/dalvikvm(4008): GC_EXPLICIT freed 3K, 51% free 2681K/5379K, external 0K/0K, paused 132ms
11-15 19:43:58.955: W/ActivityManager(1838): No content provider found for:
11-15 19:43:58.955: E/PackageManager(1838): Couldn't create temp file for downloaded package file.
11-15 19:43:58.955: W/dalvikvm(1838): threadid=13: thread exiting with uncaught exception (group=0x40018560)
11-15 19:43:58.965: E/AndroidRuntime(1838): *** FATAL EXCEPTION IN SYSTEM PROCESS: PackageManager
11-15 19:43:58.965: E/AndroidRuntime(1838): java.lang.NullPointerException
11-15 19:43:58.965: E/AndroidRuntime(1838): at com.android.server.PackageManagerService$FileInstallArgs.createCopyFile(PackageManagerService.java:5247)
11-15 19:43:58.965: E/AndroidRuntime(1838): at com.android.server.PackageManagerService$FileInstallArgs.copyApk(PackageManagerService.java:5255)
11-15 19:43:58.965: E/AndroidRuntime(1838): at com.android.server.PackageManagerService$InstallParams.handleStartCopy(PackageManagerService.java:5051)
11-15 19:43:58.965: E/AndroidRuntime(1838): at com.android.server.PackageManagerService$HandlerParams.startCopy(PackageManagerService.java:4902)
11-15 19:43:58.965: E/AndroidRuntime(1838): at com.android.server.PackageManagerService$PackageHandler.doHandleMessage(PackageManagerService.java:516)
11-15 19:43:58.965: E/AndroidRuntime(1838): at com.android.server.PackageManagerService$PackageHandler.handleMessage(PackageManagerService.java:461)
11-15 19:43:58.965: E/AndroidRuntime(1838): at android.os.Handler.dispatchMessage(Handler.java:99)
11-15 19:43:58.965: E/AndroidRuntime(1838): at android.os.Looper.loop(Looper.java:130)
11-15 19:43:58.965: E/AndroidRuntime(1838): at android.os.HandlerThread.run(HandlerThread.java:60)
11-15 19:43:58.975: I/Process(1838): Sending signal. PID: 1838 SIG: 9
11-15 19:43:59.005: I/ServiceManager(1637): service 'SurfaceFlinger' died
使我的手机崩溃,冻结并重新启动
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
参考自定义ROM上的signatureOrSystem权限
基本上,
完成(好吧,至少对我有用)。
您不需要添加 android:protectionLevel="signatureOrSystem" 或 android:sharedUserId="android.uid.system"。您可以签署任何证明。
Refer to signatureOrSystem permissions on custom ROM
Basically,
<uses-permission>
Done (well, at least works for me).
You do not need to add android:protectionLevel="signatureOrSystem" or android:sharedUserId="android.uid.system". You could sign with any certification.
我认为将其放入 /system/app 文件夹并不等同于将其加载到固件中。
I assume that putting it in the /system/app folder is not equivalent to it being loaded in the firmware.
关于错误:
要获得 INSTALL_PACKAGES 权限:
在manifest.xml 文件中,将此属性放入标记清单中:
About the error:
To get INSTALL_PACKAGES permission:
In the manifest.xml file, put this attribute inside the tag manifest:
运行这两行修复了 PackageManager 权限错误的问题:“无法为下载的包文件创建临时文件。”
Running these two lines fixes the issue with PackageManager permission error: "Couldn't create temp file for downloaded package file."