关于安卓root过手机静默安装与卸载

用到一个工具类AndroidCommon  详细了解地址:http://www.open-open.com/lib/view/open1385174381198.html   ,其中为我们提供了root后静默安装的工具类PackageUtils,其中包含安装与卸载。

走下思路,首先静默安装要用到adb命令,所以手机必须root(至于360手机助手静默安装,无需root也可以静默安装,具体我也不清楚,哪位大牛清楚希望可以探讨下),在adb命令中执行pm install -r即可,具体可以参考AndroidCommon提供的类。工具类PackageUtil.sinstallSilent(context,
path)静默安装与PackageUtil.uninstallSilent(this, path)静默卸载,都有返回值,返回值为1说明是成功的,具体返回值PackageUtil中有就不多说了
如果返回值不是1的话,可以执行普通的安装方法,接下来看代码

demo中只将AndroidCommon的工具类打包成Lib,可直接看源码

demo下载地址  http://download.csdn.net/detail/u012303938/8679791

MainActivity.class  代码中的apk下载地址可能会过期,如果不能下载,换个apk下载地址即可

package com.example.update;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import cn.trinea.android.common.util.PackageUtils;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity{
	private int percent;
	private Button button1,button2;
	private TextView textView1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1=(Button) findViewById(R.id.button1);
		button2=(Button) findViewById(R.id.button2);
		textView1=(TextView) findViewById(R.id.textView1);
		button1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				loadApks();
			}
		});
		button2.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int  l=PackageUtils.uninstallSilent(MainActivity.this, "com.example.callphone");
				 if(l!=1){
					 Uri packageURI = Uri.parse("package:" + "com.example.callphone");
			            Intent uninstallIntent = new Intent(Intent.ACTION_DELETE,packageURI);
			            uninstallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			            startActivity(uninstallIntent);
					}
			}
		});
	}
	private void loadApks() {
		// TODO Auto-generated method stub
		new Thread(){
			public void run() {
				HttpClient client=new DefaultHttpClient();
				String url="http://121.42.15.80:800/callphone.apk";
				HttpGet get=new HttpGet(url);;

				HttpResponse response=null;
				try {
					response=client.execute(get);
					HttpEntity entity=response.getEntity();
					long length=entity.getContentLength();
					int count=0;
					InputStream is=entity.getContent();
					FileOutputStream outputStream=null;
					if(is!=null){
						File file=new File(Environment.getExternalStorageDirectory(),"ybds.apk");
						outputStream=new FileOutputStream(file);
						byte[]  bt=new byte[1024];
						int len=-1;

						while((len=is.read(bt))!=-1){
							outputStream.write(bt, 0, len);
							count+=len;
							if((int)count*100/length>percent){
								percent=(int)(100*count/length);
								((Activity) MainActivity.this).runOnUiThread(new Runnable() {

																		@Override
																		public void run() {
																			// TODO Auto-generated method stub
																			//roundprogressbar.setProgress(percent);
																			textView1.setText(String.valueOf(percent));
																		}
																	});

							}
						}
						outputStream.flush();
						if(outputStream!=null){
							outputStream.close();
						}
					}
					inStall();
					//jimodown();
					//installDown();
				} catch (ClientProtocolException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			};
		}.start();
	}

	protected void inStall() {
		// TODO Auto-generated method stub

		//	File files=new File(Environment.getExternalStorageDirectory(),"TestDemo.apk");
		String path =Environment.getExternalStorageDirectory()
				.getPath() +"/ybds.apk" ;

		int i=PackageUtils.installSilent(this, path);
		if(i!=1){
			File file = new File(path);
			if(!file.exists()){
				return ;
			}
			Intent intent = new Intent();
			intent.setAction("android.intent.action.VIEW");
			intent.addCategory("android.intent.category.DEFAULT");
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
			startActivity(intent);
		}

	}
}
时间: 2024-10-09 15:49:43

关于安卓root过手机静默安装与卸载的相关文章

Android 请求root权限实现静默安装

这几天在做一个新的功能,需要用到静默安装,所以在网上找了一些静默安装的资料就在这里记录一下吧.其实实现静默安装的原理就是请求Android手机的root权限,通过执行Linux命令来安装APK到手机系统,其实代码不是很多,就在这里列一下吧,以后用的时候可以直接翻出来: 1 public class MyThread extends Thread { 2 private String path; 3 4 public MyThread(String path) { 5 // TODO Auto-g

Android随笔之——静默安装、卸载

随笔之所以叫随笔,就是太随意了,说起来,之前的闹钟系列随笔还没写完,争取在十月结束之前找时间把它给写了吧.今天要讲的Android APK的静默安装.卸载.网上关于静默卸载的教程有很多,更有说要调用隐藏API,在源码下用MM命令编译生成APK的,反正我能力有限,没一一研究过,这里选择一种我试验成功的来讲. 静默安装.卸载的好处就是你可以偷偷摸摸,干点坏事什么的,哈哈~ 一.准备工作 要实现静默安装.卸载,首先你要有root权限,能把你的静默安装.卸载程序移动到system/app目录下. 1.用

android 实现静默安装、卸载(图)

android中应用的安装卸载,大家(用android设备的)肯定不陌生.这里就来浅谈android应用的安装.卸载的实现方式. 1.系统安装程序 android自带了一个安装程序---/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用都是通过这个apk来安装的.代码使用也非常简单: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /* 安装apk */ public static void installApk(

关于root 关于实现静默安装

(文章最初写在有道笔记里面,所以排版不是很好,请原谅) 首先说一下静默安装,经过10天左右的研究,大概有如下几种方法: 一. 我们平时开发打包后,我们的ide(包括eclipse idea as )  都会给我们自动安装到手机上.那么很多手机并没有显示安装界面,当然也有部分手机是他妈的,做了底层的binder,这里还是会显示出来安装界面. 这种方法是通过命令的方式,adb shell命令的方式只有连接电脑才能实现.而普通的应用就只能通过root权限,否则没法执行一些特殊的adb命令.   但是问

android 实现静默安装、卸载

方法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.

innosetup的静默安装与卸载

静默安装,就是减少程序与用户的交互,一站式的安装过程(一气呵成) 1. 静默安装参数 innosetup的静默安装是通过参数来控制的 1.1.  /silent                       静默安装,但如果又报错,还是会提示,并且有进度条 1.2.  /verysilent                 静默安装,更强制,不过是否报错,都不会有任何提示 (注意:如果需要重启电脑,它会不提示而直接重启) 1.3.  /suppressmsgboxes   由 suppress(抑

安卓监听apk的安装和卸载

1.创建广播类,继承BroadcastReceiver public class PackageBroadCastReceiver extends BroadcastReceiver { private static final int PACKAGE_NAME_START_INDEX = 8; @Override public void onReceive(Context context, Intent intent) { if (intent == null) { return; } if

Android静默安装实现方案,仿360手机助手秒装和智能安装功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好.虽说这种方式看上去不打搅用户,但是却存在着一个问题,因为Android系统会在安装界面当中把程序所声明的权限展示给用户看,用户来评估一下这些权限然后决定是否要安装该程序,但如果使用了静默安装的方式,也就没

Android 无需root实现apk的静默安装

转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/50533137 Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFi