android implements silent installation and uninstallation methods

  • 2020-06-19 11:43:13
  • OfStack

An example of android shows how to install and uninstall silently. Share to everybody for everybody reference. The details are as follows:

Method 1: [Using the call interface method, API is hidden when installing and uninstalling the application, so the source code of Android system must be downloaded, developed and compiled under the source code, and MM command is used to compile and generate APK files]


import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.IPackageInstallObserver;
import android.content.pm.IPackageDeleteObserver;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class InstallActivity extends Activity {
 /** Called when the activity is first created. */
 private String APK_NAME = "QQHD-mini.apk";
 private Button install = null;
 private Button uninstall = null;
 private final int INSTALL_COMPLETE = 1;
 private final int UNINSTALL_COMPLETE = 2;
 final static int SUCCEEDED = 1;
 final static int FAILED = 0;
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.install_uninstall);
  install = (Button) findViewById(R.id.install);
 uninstall = (Button) findViewById(R.id.uninstall);
 uninstall.setOnClickListener(listener1);
  install.setOnClickListener(listener2);
}
 private OnClickListener listener2=new OnClickListener(){
  public void onClick(View v) {
   String fileName = Environment.getExternalStorageDirectory() + "/" + APK_NAME; 
   Uri uri = Uri.fromFile(new File(fileName));
   int installFlags = 0;
   PackageManager pm = getPackageManager();
   try {
    PackageInfo pi = pm.getPackageInfo("com.tencent.minihd.qq", 
      PackageManager.GET_UNINSTALLED_PACKAGES);
    if(pi != null) {
     installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
    }
   } catch (NameNotFoundException e) {}
   PackageInstallObserver observer = new PackageInstallObserver();
   pm.installPackage(uri, observer, installFlags, "com.tencent.minihd.qq");
  }
 };
 class PackageInstallObserver extends IPackageInstallObserver.Stub {
  public void packageInstalled(String packageName, int returnCode) {
   Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
   msg.arg1 = returnCode;
   mHandler.sendMessage(msg);
  }
 };
 private Handler mHandler = new Handler() {
  public void handleMessage(Message msg) {
   switch (msg.what) {
    case INSTALL_COMPLETE:
     int centerTextLabel;
     Drawable centerTextDrawable = null;
     if(msg.arg1 == SUCCEEDED) {
      Toast.makeText(getApplicationContext(), "install apk SUCCEEDED", Toast.LENGTH_SHORT).show();
     } else {}
     if (centerTextDrawable != null) {}
     break;
 case UNINSTALL_COMPLETE:
     int centerTextLabel2;
     Drawable centerTextDrawable2 = null;
     if(msg.arg1 == SUCCEEDED) {
      Toast.makeText(getApplicationContext(), "uninstall apk SUCCEEDED", Toast.LENGTH_SHORT).show();
     } else {}
     if (centerTextDrawable2 != null) {}
     break; 
    default:
     break;
   }
  }
 };
 private OnClickListener listener1=new OnClickListener(){
  public void onClick(View v) {
   PackageManager pm = getPackageManager();
   PackageDeleteObserver observer = new PackageDeleteObserver();
   pm.deletePackage("com.tencent.minihd.qq", observer, 0);
  }
 };
 private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
  public void packageDeleted(String packageName, int returnCode) {
   Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE);
   msg.arg1 = returnCode;
   mHandler.sendMessage(msg);
  } 
 }
}

Permissions related to installation and uninstallation:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />

Method 2: [Need to obtain root permission or have the same signature as rom, that is, let the apk run in the system as System]


private void test() {
 execCommand("system/bin/pm install -r " + "sdcard/xxx.apk");
 // xxx.apk Place in the root directory of the built-in storage ( mnt/sdcard/xxx.apk ) 
 // execCommand("system/bin/pm uninstall " + PACKAGE_NAME); 
 //PACKAGE_NAME for xxx.apk The package name 
 }
 public boolean execCommand(String cmd) {
 Process process = null;
 try {
 process = Runtime.getRuntime().exec(cmd);
 process.waitFor();
 } catch (Exception e) {
 return false;
 } finally {
 try {
 process.destroy();
 } catch (Exception e) {
 }
 }
 return true;
}

Other methods: 1 some third party jar package and so on.

Hopefully, this article has helped you with your Android programming.


Related articles: