检测Android手机是否具有root权限和无需root实现静默安装装

Android应用源码获取root权限静默安装
今天是&&日&&&&&&星期日
您还没有登录,&&&&
当前位置:
Android应用源码获取root权限静默安装
更新时间:日
浏览次数:3076 次
下载次数:388 次
项目来源:暂无记录
这是一个获取root权限后,不弹出系统安装界面,直接进行安装的的源码。代码只有一个MainActivity,看起来相对比较容易,代码中重要部分都已加入详细的注释,方便大家阅读。不过应用程序运行命令获取ROOT权限,设备必须已破解(获得ROOT权限),代码中主要对流进行操作,有对文件读写不清楚的都可以看看。(源码采用GBK编码)。之前也介绍过一个静默卸载的项目/source/6484.html和一个静默安装的/source/8340.html。感兴趣自己去研究吧。
您必须才能评论.
站长的qq号多少,需要技术购买
&&常见问题
&&充值交易
&&快捷通道
&&用户中心
&&联系我们
微信:javaapkwx
· 鲁ICP备号-1· Powered by · Theme by JavaApkTM
· .19 queries in 0.309 seconds这几天在做一个新的功能,需要用到静默安装,所以在网上找了一些静默安装的资料就在这里记录一下吧。其实实现静默安装的原理就是请求Android手机的root权限,通过执行Linux命令来安装APK到手机系统,其实代码不是很多,就在这里列一下吧,以后用的时候可以直接翻出来:
public class MyThread extends Thread {
public MyThread(String path) {
// TODO Auto-generated constructor stub
this.path =
public void run() {
// TODO Auto-generated method stub
super.run();
Process process = null;
OutputStream out = null;
InputStream in = null;
process = Runtime.getRuntime().exec("su");
out = process.getOutputStream();
out.write(("pm install -r " + path + "\n").getBytes());
in = process.getInputStream();
int len = 0;
byte[] bs = new byte[256];
while (-1 != (len = in.read(bs))) {
String state = new String(bs, 0, len);
if (state.equals("Success\n")) {
Message m = new Message();
m.arg1 = 1;
DownLoadService.this.myHandler.sendMessage(m);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
其主要步骤为:
1.执行Android手机的su命令,如果手机已经root过了,一般情况下Android手机会有一个提示框,提示你是否给予root权限,
2.如果Android获得了root权限并且同意该应用的权限,则调用pm命令进行安装
3.安装完成后可以通过读取命令的输出流来判断应用是否安装成功,一般会获得一个&success&的字符换
出现的问题:
1.如果用户拒绝授予root权限,在这里没有办法正确判断
2.如果在用户拒绝授予root权限的情况下,读取起错误流可以获得失败的判断。但是在读取了起错误流的情况下,如果用户授予其root权限,则不能正常执行安装操作
目前这两个问题还不知道怎么判断,希望有做过的朋友指点一下
Http下载APK文件,具体代码如下:
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = new DefaultHttpClient()
.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
InputStream is = httpResponse.getEntity().getContent();
// 开始下载apk文件
FileOutputStream fos = new FileOutputStream(downloadPath
+ "/" + name+".apk");
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) != -1) {
fos.write(buffer, 0, count);
fos.close();
is.close();
Log.d(TAG, "apk path = " + downloadPath + "/" + name+".apk");
final String path = downloadPath + "/" + name+".apk";
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
// TODO Auto-generated method stub
Message m = new Message();
m.arg1 = 2;
Bundle bundle = new Bundle();
bundle.putString("path", path);
m.setData(bundle);
DownLoadService.this.myHandler.sendMessage(m);
}, timeOut);
new MyThread(path).start();
} catch (Exception e) {
阅读(...) 评论()&由于Android底层是Linux内核,故了解了Linux的权限管理后就可以知道ROOT的原理,具体可以访问《》一文,而一般的Androd下的su命令只支持在ROOT用户和SHELL用户下才有权限让程序以root用户身份运行,其实看完Android源码下的system/extras/su/su.c代码即可清楚,而我们绕过了其中的当前运行用户判断来让所有的用户都可以将以自己身份运行的程序尝试去设置以root用户身份运行,即运行su命令不需判断运行程序的当前用户的uid,直接可以设置相应的uid和gid,而我们所做的只是修改su.c文件,把如下代码屏蔽即可。
&&&&myuid = getuid();
&&&&if (myuid != AID_ROOT && myuid != AID_SHELL) {
&&&&&&&&fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
&&&&&&&&return 1;
&&&&参考网址:
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
转载自:/Mobile/Android/61.html
阅读(...) 评论()Android真正的静默安装 - 简书
Android真正的静默安装
原文出处:
关于Android应用程序的静默安装,很早以前我就做过一些了解,网上大多数给出的方案都是有严苛的要求:比如要获取root权限、或者是针对特殊的rom,甚至要自己刷机,这些方法即使能够达到目的但是看起来也不那么诱人,对于黑客技术而言几乎毫无用处。最近无意中看到了潭州教育的一个视频课程讲到静默安装,出于好奇心听了一下, 惊喜的发现真的可以做到,于是自己动手尝试了一下,整个过程略微复杂,中间也有很多视频里没提到的各种问题,在这里做一个总结,也分享给大家。文章末尾有例程供大家参考,如有纰漏,欢迎指正。
首先大家回忆一下正常的安装过程,点击安装后系统会有一个安装界面,一路下一步直到安装完成最后设置权限。那么这个安装程序是一个系统应用——PackageInstaller.apk,底层是通过“pm”工具完成的。我们要做的就是绕过这个界面并完成安装,下面开始我们的工作……
1、研究系统安装工具
我们定位到Android源码的Pm目录:
frameworks -& base -& cmds -& pm -& src -& com -& android -& cmmands -& pm :Pm.java
这个就是PackageManager的源码,用于解析Pm脚本工具,里面有个main函数:
public static void main(String[] args)
new Pm().run(args);
里面只有一句话,跳转到run方法,run方法比较长,我就不复制了,里面主要是对pm命令做解析,比如pm install、pm list等等,不同的命令对应不同的函数,这里我们关注install命令(对应的有uninstall,可以用来做静默卸载)。如果run方法解析到install命令,则会调用runInstall()方法,里面主要是对命令后面所带的参数做解析,在方法中有如下语句:
PackageInstallObserver obs = new PackageInstallObserver();
mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,installerPackageName);
synchronized (obs)
while (!obs.finished) {
obs.wait();
} catch (InterruptedException e) {
if (obs.result == PackageManager.INSTALL_SUCCEEDED)
System.out.println("Success");
System.err.println("Failure ["+ installFailureToString(obs.result) + "]");
} catch (RemoteException e) {
System.err.println(e.toString());
System.err.println(PM_NOT_RUNNING_ERR);
关键在于第三行:
mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,installerPackageName);
这就是我们苦苦寻找的东西,在框架中通过installPackage方法安装。我们只要在自己的程序中使用这个方法就可以绕过系统安装程序进行静默安装。
2、在程序中调用安装方法
首先新建一个自己的程序命名为SlienceInstall,如下图:
建立静默安装工程
为了方便演示,只在布局文件里加入一个按钮,用于启动静默安装。在按钮的触发事件里加入安装语句。由于installPackage方法是实例方法,我们首先要知道mPm对象是什么。同样在Pm.java中可以找到mPm的定义:
IPackageManager mPm;
她是一个IPackageManager接口类型的对象,有以下语句赋值:
mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
很明显这里用到了aidl,接着我们需要找到IPackageManger,这也是框架中的类,在如下路径可以找到:
frameworks -& base -& core -& java -& android -& content -& pm : IPackageManager.aidl
我们直接把这个类复制出来放到我们的工程中,注意包名要和aidl文件包名一致,如下图:
加入pm的aidl文件
我们一起看看程序报的什么错误:
aidl错误提示
显然在IPackage接口中引用了其他未导入的程序,从包名可以确定这些程序都和IPackage位于同一包下,在pm文件夹下找到报错的几个aidl文件一起复制进来,随即错误消失,编译通过。此时工程目录如下:
在gen目录下,系统自动为我们生成了aidl对应的java文件,这是aidl的一个特性,我们可以不必理会其中的内容,如果感兴趣的朋友可以打开自行研究。
现在我们可以使用IPackageManager了,这里回顾一下源码中Pm.java安装程序的语句:
mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,installerPackageName);
按照frameworks中的方法,通过她来申明一个mPm,然后赋值。将上面的赋值语句直接复制到我们的程序中,发现系统提示找不到ServiceManager。这里可以有两种方法解决,第一种大家应该可以想到,我们可以通过同样的方式去frameworks里找到这个类,复制出来使用,但这可能又会在ServiceManager中涉及到其他的类,如果都这样去查找、复制工作量未免太大。这里我使用另一种方法,注意这里只是使用了ServiceManager的静态方法,而且frameworks中的类我们在编译时找不到,但是在运行时是可以找到的,所以通过反射机制来调用函数是再好不过的了。
于是回到Pm.java中,从程序头的一堆import中可以找到ServiceManager的地址:
import android.os.RemoteE
import android.os.ServiceM
import android.provider.S
接下来在程序中通过反射拿到ServiceManager的getService方法,代码如下:
Class&?& clazz = Class.forName("android.os.ServiceManager");
Method method_getService = clazz.getMethod("getService",String.class);
调用getService方法,并接收IBinder返回值:
IBinder bind = (IBinder) method_getService.invoke(null, "package");
最后在调用安装方法之前,先来看看这个方法的几个参数:
packageURI: 安装包的地址。
observer:安装完成后的回调函数。
flags:安装方式,主要有普通安装和覆盖安装。1表示普通,2表示覆盖。
installerPackageName:执行安装的应用程序名。其中observer可以直接给null,如果想要设置回调的话,需要新建一个类实现IPackageInstallOberver类(之前已经导入过)。最后加上目标apk的文件对象apkFile,到这里整个安装函数的调用就OK了,目前工程MainActivity代码如下:
//反射拿到Service Manager,然后调用getService获取IBinder对象
Class&?& clazz = Class.forName("android.os.ServiceManager");
Method method_getService = clazz.getMethod("getService",
String.class);
IBinder bind = (IBinder) method_getService.invoke(null, "package");
IPackageManager iPm = IPackageManager.Stub.asInterface(bind);
//调用安装函数
iPm.installPackage(Uri.fromFile(apkFile), null, 2,apkFile.getName());
} catch (Exception e)
e.printStackTrace();
这时候可以运行一下,发现目标apk并没有如愿的静默安装,那么继续下面的步骤:
3、添加系统权限
在系统上安装程序是需要注册权限的,在Manifest文件中加入如下语句:
&uses-permission android:name="android.permission.INSTALL_PACKAGES" /&
由于然后同样是manifest文件,在&manifest/&节点中加入sharedUserId属性:
&manifest xmlns:android="/apk/res/android"
package="com.example.slienceinstall"
android:sharedUserId="android.uid.system"
//声明为系统应用
android:versionCode="1"
android:versionName="1.0" &
&manifest/&
这样就完成了权限的注册,此时IDE会提示我们INSTALL_PACKAGE是系统程序的权限,普通程序是无法获取到的。获取系统权限当然没有这么简单,还需要几步操作才能完成。
4、给应用打上系统签名
见招拆招,既然要求我们的应用是系统应用,那么就把我们的程序变成系统程序吧。这里也是许多关于静默安装的文章中要求刷机的原因,因为我们把应用放到rom中就可以让我们的应用变成系统应用,当然我这里讲的不需要这么做,下面将介绍这种方法。
第一步:声明为系统应用
第二步:提取系统签名程序
其实系统应用和普通应用的不同之处主要在于应用签名,所以如果希望不重新编译ROM而让应用拥有系统权限,只要能够用系统签名程序为我们的程序打上签名就可以了。在Android源码中包含了系统签名程序,定位到系统签名文件目录:
build -& tools -& signapk:SignApk.java
新建一个Java工程,命名为SignSystemApk,然后将源码中的SignApk.java复制进来。
第三步:提取签名配置文件
完成签名还需要另外两个文件,分别叫platform.pk8和platform.x509.pem,在源码的以下路径可以找到:
build -& target -& product -& security
找到之后复制到SignSystemApk工程里,整个签名工程的目录结构如下:
那么到这里,整个签名程序就完成了。
第四步:利用签名程序给应用签名打包
只要运行这个打包程序,就可以把我们的应用作为系统应用打包发布了。首先将之前写好的SlienceInstall程序打包成apk(使用自定义的签名),复制到SingSystemApk工程里。工程结构如下:
在运行前先要对工程进行配置:右键工程名,依次选择“Run as”→“Run configurations”,然后在左侧选择“Java Application”→“New_configuration”,在右侧将Project设置为SignSystemApk,接着选择Main class。结果如下:
然后将右边的页卡切换到“Arguments”,编辑“Program arguments”,加入以下命令:
platform.x509.pem platform.pk8 slience_install.apk system_install.apk
配置好之后,Apply → Run。运行成功在工程目录上点击F5刷新,可以看到多出来一个system_install.apk文件,这个就是我们想要的文件。如图:
5、静默安装
将SignSystemApk打包出来的安装包安装在手机上,然后将目标apk放到指定位置(和程序中apk的uri地址有关),点击按钮,退出程序,可以看到我们的目标apk成功被安装到手机上,并且没有任何的提示。到此,静默安装功能完美运行,接下来可以发挥聪明才智,尽情的做“坏事”了。
这个项目用到了很多知识点,个人觉得对能力的提升有很大帮助。自从忙于毕业论文以来,很久没有好好研究过Android了,发现学术论文和技术博客风格相差还是很大的。-_-!
马上准备回家过年了,将这次的收获作为本月的博客分享给大家。祝大家猴年吉祥!同时,马上毕业的我,也将在几个月后开启职业生涯,继续努力!
                              
—— 超低空
代码链接:
静默安装程序安装包:Android系统签名程序:CSDN:简书:
低空俯瞰,群星璀璨;
远方的世界,灯火阑珊 。。。
Blog:http://blog.csdn.net/mc_hust
Github:/hust-mc查看:11908|回复:25
看了很多网上的文章,还是没有头绪
求助:静默安装APK的功能实现
51CTO学院讲师
这是根本不可能实现的。Android不允许普通的应用程序静默安装(有root权限也不行)。除非你的程序被嵌入ROM中,像android market一样。 楼主见过常规方式安装的apk有这功能吗!!:lol
热心广援~助人为乐~
这个问题我也研究过呀
查了很多资料
有个帖子讲的挺合理的 但是合理归合理 但是最后还是无法实现
基本上是重写了android系统
而且如果真做到了 基本上android就废了 嵌套病毒就变得太简单了 安全性能就有问题了
1楼 你好,我要用Vitamio的外架包做一个万能播放器,但是要用这个外架包呢,需要安装一个Vitamio插件,我我现在写成了提示安装的一个模式,想改成静默安装,我看搜狐视频,风行,视讯中国,VPlayer这些APK中 首次进入都会有一个初始化,我想做成这个效果,今天一直在看 网上的很多文章 也在尝试&&但是未成功
引用:原帖由 redgale61 于
14:22 发表
1楼 你好,我要用Vitamio的外架包做一个万能播放器,但是要用这个外架包呢,需要安装一个Vitamio插件,我我现在写成了提示安装的一个模式,想改成静默安装,我看搜狐视频,风行,视讯中国,VPlayer这些APK中 首次进入都会有一个初始化, ... 亲爱的午饭,欢迎来Android论坛交流探讨,如何您想和某位午饭交流(例如:本回复中是想和1楼的午饭进行探讨)您可以引用1楼的帖子,这样1楼的午饭可以很快收到系统发送的通知,使交流更加顺畅。
具体操作:在1楼帖子的右下角点击引用按钮,如图:
高级工程师
这个基本上是不能实现的,如果能实现那安卓还有安全性可言么...
可以实现,前提条件是,获取ROOT或者有系统签名。然后通过执行pm install命令安装
等我有用把我的心得写下:)
高招·十月上线
引用:原帖由 hncdcsm1 于
16:12 发表
可以实现,前提条件是,获取ROOT或者有系统签名。然后通过执行pm install命令安装
等我有用把我的心得写下:) 强烈呼唤你的分享呀~坐等~
51CTO学院讲师
引用:原帖由 hncdcsm1 于
16:12 发表
可以实现,前提条件是,获取ROOT或者有系统签名。然后通过执行pm install命令安装
等我有用把我的心得写下:) 获得root权限和系统签名也不行,必须将apk嵌到rom里面,还得做一些处理,嵌入到rom的程序可以访问android系统d一切资源,但需要刷rom才能进行安装,而且无法卸载!只能停止!
助理工程师
支持,谢谢楼主的分享!楼主好人
中级工程师
想干坏事?
那就不要apk格式了
android静默安装apk&&不是特别的困难
&&要想实现 必须你的APP 要签名
1.&&几个jar包&&android-framework.jar& &android-core.jar&&android-common.jar
2.签名工具
signapk.ar
platform.pk8
platform.x509.pem
签名方法:
win系统-cmd命令行(必须安装jdk环境):java -jar signapk.jar platform.x509.pem platform.pk8 未签名.apk& &签名以后的.apk
linux系统-终端(必须安装jdk环境):java -jar signapk.jar platform.x509.pem platform.pk8 未签名.apk& &签名以后的.apk
package org.rzmars.
import java.io.ByteArrayOutputS
import java.io.IOE
import java.io.InputS
import android.app.A
import android.os.B
import android.content.pm.*;
public class InstallAPKActivity extends Activity {
& && &&&/** Called when the activity is first created. */
& && &&&public void onCreate(Bundle savedInstanceState) {
& && && && && & super.onCreate(savedInstanceState);
& && && && && & setContentView(R.layout.main);
& && && && && & System.out.println(&hhh&);
& && && && && & PackageInstaller installer = new PackageInstaller(this);//&&你要安装的APK 的 路径:
& && && && && & installer.instatllBatch(&//mnt/sdcard/ren.apk&);
& && &&&public String install(String apkAbsolutePath) {
& && && && && & String[] args = { &pm&, &install&, &-r&, apkAbsolutePath };
& && && && && & String result = &&;
& && && && && & ProcessBuilder processBuilder = new ProcessBuilder(args);
& && && && && & Process process =
& && && && && & InputStream errIs =
& && && && && & InputStream inIs =
& && && && && & try {
& && && && && && && && &ByteArrayOutputStream baos = new ByteArrayOutputStream();
& && && && && && && && &int read = -1;
& && && && && && && && &process = processBuilder.start();
& && && && && && && && &errIs = process.getErrorStream();
& && && && && && && && &while ((read = errIs.read()) != -1) {
& && && && && && && && && && &&&baos.write(read);
& && && && && && && && &}
& && && && && && && && &baos.write('\n');
& && && && && && && && &inIs = process.getInputStream();
& && && && && && && && &while ((read = inIs.read()) != -1) {
& && && && && && && && && && &&&baos.write(read);
& && && && && && && && &}
& && && && && && && && &byte[] data = baos.toByteArray();
& && && && && && && && &result = new String(data);
& && && && && & } catch (IOException e) {
& && && && && && && && &e.printStackTrace();
& && && && && & } catch (Exception e) {
& && && && && && && && &e.printStackTrace();
& && && && && & } finally {
& && && && && && && && &try {
& && && && && && && && && && &&&if (errIs != null) {
& && && && && && && && && && && && && & errIs.close();
& && && && && && && && && && &&&}
& && && && && && && && && && &&&if (inIs != null) {
& && && && && && && && && && && && && & inIs.close();
& && && && && && && && && && &&&}
& && && && && && && && &} catch (IOException e) {
& && && && && && && && && && &&&e.printStackTrace();
& && && && && && && && &}
& && && && && && && && &if (process != null) {
& && && && && && && && && && &&&process.destroy();
& && && && && && && && &}
& && && && && & }
& && && && && &
package org.rzmars.
import java.io.F
import android.content.C
import android.content.I
import android.content.pm.PackageI
import android.content.pm.PackageM
import android.content.pm.PackageManager.NameNotFoundE
import android.content.pm.ApplicationI
import android.content.pm.PackageP
import android.net.U
import android.util.L
import android.util.DisplayM
import android.content.pm.IPackageInstallO
import android.content.pm.IPackageDeleteO
import android.os.H
import android.os.M
public class PackageInstaller {
& && &&&private final int INSTALL_COMPLETE = 1;
& && &&&final static int SUCCEEDED = 1;
& && &&&final static int FAILED = 0;
& && &&&private final static String TAG = &PackInstaller&;
& && &&&private Context mC
& && &&&private ApplicationInfo mAppI
& && &&&public PackageInstaller(Context context) {
& && && && && & mContext =
& && &&&public void install(String path, String packageName) {
& && && && && & Intent intent = new Intent(Intent.ACTION_VIEW);
& && && && && & intent.setDataAndType(Uri.fromFile(new File(path)),
& && && && && & &application/vnd.android.package-archive&);
& && && && && & mContext.startActivity(intent);
& && &&&public void instatllBatch(String path) {
& && && && && & int installFlags = 0;
& && && && && & Uri mPackageURI = Uri.fromFile(new File(path));
& && && && && & PackageParser.Package mPkgInfo = getPackageInfo(mPackageURI);
& && && && && & mAppInfo = mPkgInfo.applicationI
& && && && && & String packageName = mAppInfo.packageN
& && && && && & Log.i(TAG, &====install packageName =& + packageName);
& && && && && & PackageManager pm = mContext.getPackageManager();
& && && && && & try {
& && && && && && && && &PackageInfo pi = pm.getPackageInfo(packageName,
& && && && && && && && &PackageManager.GET_UNINSTALLED_PACKAGES);
& && && && && && && && &if (pi != null) {
& && && && && && && && && && &&&installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
& && && && && && && && &}
& && && && && & } catch (NameNotFoundException e) {
& && && && && & }
& && && && && & if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
& && && && && && && && &Log.w(TAG, &Replacing package:& + packageName);
& && && && && & }
& && && && && & PackageInstallObserver observer = new PackageInstallObserver();
& && && && && & pm.installPackage(mPackageURI, observer, installFlags,
& && && && && & packageName);
& && &&&private class PackageInstallObserver extends IPackageInstallObserver.Stub {
& && && && && & public void packageInstalled(String packageName, int returnCode) {
& && && && && && && && &// Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
& && && && && && && && &// msg.arg1 = returnC
& && && && && && && && &// mHandler.sendMessage(msg);
& && && && && && && && &Log.i(TAG, &====INSTALL_COMPLETE&);
& && && && && & }
& && &&&private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
& && && && && & public void packageDeleted(boolean succeeded) {
& && && && && && && && &// Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE);
& && && && && && && && &// msg.arg1 = succeeded?SUCCEEDED:FAILED;
& && && && && && && && &// mHandler.sendMessage(msg);
& && && && && && && && &Log.i(TAG, &====UNINSTALL_COMPLETE&);
& && && && && & }
& && &&&public void uninstall(String packageName) {
& && && && && & Uri packageURI = Uri.parse(&package:& + packageName);
& && && && && & Intent uninstallIntent = new Intent(Intent.ACTION_DELETE,
& && && && && & packageURI);
& && && && && & mContext.startActivity(uninstallIntent);
& && &&&public void uninstallBatch(String packageName) {
& && && && && & PackageDeleteObserver observer = new PackageDeleteObserver();
& && && && && & mContext.getPackageManager().deletePackage(packageName, observer, 0);
& && &&&/*
& && && &*
& && && &* Utility method to get package information for a given packageURI
& && && &*/
& && &&&public PackageParser.Package getPackageInfo(Uri packageURI) {
& && && && && & final String archiveFilePath = packageURI.getPath();
& && && && && & PackageParser packageParser = new PackageParser(archiveFilePath);
& && && && && & File sourceFile = new File(archiveFilePath);
& && && && && & DisplayMetrics metrics = new DisplayMetrics();
& && && && && & metrics.setToDefaults();
& && && && && & PackageParser.Package pkg = packageParser.parsePackage(sourceFile,
& && && && && & archiveFilePath, metrics, 0);
& && && && && & // Nuke the parser reference.
& && && && && & packageParser =
& && && && && &
& && &&&/*
& && && &*
& && && &* Utility method to get application information for a given packageURI
& && && &*/
& && &&&public ApplicationInfo getApplicationInfo(Uri packageURI) {
& && && && && & final String archiveFilePath = packageURI.getPath();
& && && && && & PackageParser packageParser = new PackageParser(archiveFilePath);
& && && && && & File sourceFile = new File(archiveFilePath);
& && && && && & DisplayMetrics metrics = new DisplayMetrics();
& && && && && & metrics.setToDefaults();
& && && && && & PackageParser.Package pkg = packageParser.parsePackage(sourceFile,
& && && && && && && && && && &&&archiveFilePath, metrics, 0);
& && && && && & if (pkg == null) {
& && && && && && && && &
& && && && && & }
& && && && && & return pkg.applicationI
& && &&&private Handler mHandler = new Handler() {
& && && && && & public void handleMessage(Message msg) {
& && && && && && && && &switch (msg.what) {
& && && && && && && && &case INSTALL_COMPLETE:
& && && && && && && && && && &&&if (msg.arg1 == SUCCEEDED) {
& && && && && && && && && && &&&} else {
& && && && && && && && && && &&&}
& && && && && && && && && && &&&
& && && && && && && && &default:
& && && && && && && && && && &&&
& && && && && && && && &}
& && && && && & }
& && &&&};
代码 很简单 看看就明白了
感谢牛人分享
本帖最后由 RZMars 于
18:22 编辑
引用:原帖由 RZMars 于
18:17 发表
android静默安装apk&&不是特别的困难
&&要想实现 必须你的APP 要签名
1.&&几个jar包&&android-framework.jar& &android-core.jar&&android-common.jar
2.签名工具
signapk.ar
platform.pk8
platform.x509.pem ... 我擦 牛人啊
引用:原帖由 blamemaster 于
22:10 发表
我擦 牛人啊 嗯哼.........
高级工程师
引用:原帖由 RZMars 于
12:48 发表
嗯哼......... 我觉得这可开个主题让大家论证了~ 放在回复里关注的人太少~
高招·十月上线
引用:原帖由 hncdcsm1 于
14:17 发表
http://chensiming./425 欢迎参与讨论呀~
引用:原帖由 hncdcsm1 于
14:17 发表
http://chensiming./425 牛人,膜拜。
研究了下,还没试,如果是第三方软件能获取到安装权限吗?
引用:原帖由 hncdcsm1 于
14:17 发表
http://chensiming./425 另外,我看你的标题是(一),是说你还有其他法子?
寻求一位能开发静默安装程序的程序员,价钱面议!}

我要回帖

更多关于 android root静默安装 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信