android 實現靜默安裝、卸載

來源:互聯網
上載者:User

標籤:des   android   io   ar   os   使用   sp   for   java   

方法1:【使用調用介面方法,由於安裝卸載應用程式的部分API是隱藏的,所以必須下載Android系統源碼,在源碼下開發並編譯之後使用MM命令編譯產生APK檔案】
 
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);          
        }   
    }
 
}
 
安裝、卸載相關許可權<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" />
 
 
 
方法2:【需要擷取root許可權或者和rom擁有一樣的簽名,即讓該apk以System的身份在系統中運行】
 
 private void test() {
   execCommand("system/bin/pm install -r " + "sdcard/xxx.apk"); // xxx.apk放置在內建儲存的根目錄下(mnt/sdcard/xxx.apk)
 
  // execCommand("system/bin/pm uninstall " +  PACKAGE_NAME); //PACKAGE_NAME為xxx.apk包名
  }
 
 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;
  }
 
 
 
其他方法:一些第三方jar包等方式

android 實現靜默安裝、卸載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.