Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
552 views
in Technique[技术] by (71.8m points)

android - Installing an APK using pm command

I tried updating an APK using this code:

Process process;
process = Runtime.getRuntime().exec(new String[] {"su", "-c", "pm install -r -d"+MyApk.apk});

but it does not work.

This works well when I use it with adb like:

adb shell su -c pm install -r -d /system/app/Community-debug.apk

It also works fine if it has to ask for user permission in order to install like using the intent method.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Your application would need to run as System user to access this level of commands. It cannot be done in any way if your app is distributed using standard channels, e.g. Google Play, installing from SD card, or installing by ADB. None of these would let your app breach the security.

Having said that, there is a way to get it working, but that way is for privileged distribution only. Your app must:

  • include android:sharedUserId="android.uid.system" in the AndroidManifest
  • be signed with the certificate which is used to sign the rest of the system
  • be pre-installed in one of the privileged locations: /system/app, /system/priv-app

Once your app satisfies these requirements, it can execute commands like pm install, even without the su

Needless to say that such options are only available to large bodies like telecom providers who sell their own-branded devices.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...