手机软件安装上卸载yum安装的软件不了

经验1525 米
在线时间212 小时
版本6.12.22
机型小米Note
签到次数109
MIUI版本6.12.22
来自网页版
双清了,也把手机存储也格式化了,内存卡格式化了,刷了2.0后,开机傻眼了,自带软件还在啊,
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验4408 米
在线时间137 小时
版本7.1.12
机型小米手机5s Plus
签到次数86
MIUI版本7.1.12
来自网页版
教你个方法,先刷第三方recovery,然后双清,再刷卡刷官方包,你就会发现啥都没咯
经验1067 米
在线时间94 小时
版本V8.0.12.0.MAHCNDI
积分 1278, 距离下一级还需 722 积分
积分 1278, 距离下一级还需 722 积分
机型小米MIX
签到次数62
MIUI版本V8.0.12.0.MAHCNDI
来自网页版
在全部设置里点应用,可以看到全部,已下载,已下载里的应用都可卸载(结束运行,清除数据,卸载)这样卸比较干净,全部里面的应用需要ROOT手机通过第三方软件卸载,如金山清理大师。
经验928 米
在线时间8 小时
版本5.6.18
积分 1049, 距离下一级还需 951 积分
积分 1049, 距离下一级还需 951 积分
机型红米Note 4G双卡版
签到次数27
MIUI版本5.6.18
来自网页版
双清了,也把手机存储也格式化了,内存卡格式化了,刷了2.0后,开机傻眼了,自带软件还在啊
在线时间0 小时
积分 32, 距离下一级还需 18 积分
积分 32, 距离下一级还需 18 积分
来自网页版
红米手机图片删不掉,怎么解决啊?
经验3697 米
在线时间84 小时
版本6.9.29
积分 4315, 距离下一级还需 685 积分
积分 4315, 距离下一级还需 685 积分
机型红米手机 TD版
签到次数74
MIUI版本6.9.29
来自网页版
教你个方法,先刷第三方recovery,然后双清,再刷卡刷官方包,你就会发现啥都没咯
在线时间0 小时
积分 32, 距离下一级还需 18 积分
积分 32, 距离下一级还需 18 积分
来自网页版
什么破手机啊,以后再也不买了。不好用。
在线时间3 小时
版本V7.3.1.0.KXFCNDD
积分 39, 距离下一级还需 11 积分
积分 39, 距离下一级还需 11 积分
机型小米平板1
MIUI版本V7.3.1.0.KXFCNDD
来自网页版
希望第三方recovery管用了
经验17856 米
在线时间651 小时
版本7.1.16
MIUI小用户
机型小米手机5
签到次数67
MIUI版本7.1.16
来自网页版
不会吧!!!
阿弥陀佛,我佛慈悲!
经验3545 米
在线时间203 小时
版本7.1.12
机型红米Note3 全网通
签到次数18
MIUI版本7.1.12
来自网页版
你自己安装的软件都在,这是正常的。
MIUI 300周
MIUI 300周更新纪念勋章
MIUI 7纪念勋章
已关注极客秀微信
已关注微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
2017年小金鸡勋章
回复2016年度评选活动贴
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
MIUI 8纪念勋章
MIUI 8纪念勋章
MIUI五周年
MIUI五周年纪念勋章
MIUI六周年
MIUI六周年纪念勋章
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号查看: 21867|回复: 2
彻底删除手机里的卸载已安装软件的残留文件方法
兑换券0 元
在线时间27 小时
木蚂蚁M点3
主题帖子积分
木蚂蚁小学五年级, 积分 2871, 距离下一级还需 129 积分
木蚂蚁小学五年级, 积分 2871, 距离下一级还需 129 积分
手机使用越来越慢?&&可以给你的运行内存严重变小?手机没有装多少软件? 怎么回事那、 这样的情况我会告诉你说是安装的软件残留下来的吗?
&&在软件安装之后,会产生一些软件垃圾,这些垃圾并不会随着我们软件的删除跟着被删除掉。安装了大量的软件之后,虽然已经卸载但是还有大量的垃圾会残留在手机里面。系统运行变慢很正常。
现在的垃圾清理软件也坑爹,只能删除一些SD卡没用的东西,汗 还自己产生垃圾了。下面就教大家一个真正的软件残留垃圾的教程。
& && && && && && && && && && && &1.前言曲
& && & 以下咱们来分析下安卓软件的安装(小白级!!)安卓系统分为两大部分!SYSTEM分区与DATA分区!SYSTEM分区就是ROM刷机包,也就是系统所用到的分区!
DATA分区即用户可用的分区!所有的系统设置,安装软件,联系人,短信,等等,所有手机的东东全存在这个分区!
我们所说的可用空间就是说的DATA分区剩余空间!
-----------------------------------------------------------------------------------------------------------
简单分析下DATA分区:
我们安装一个安卓的软件,需要用到三个最主要的地方!(app,dalvik-cache,data)
APP& && && && & (大家都知道,就是我们所安装的软件存放的地方,可以理解为软件的主体)
dalvik-cache&&(这个是缓存,系统所有的软件这里都会有一个缓存,包括SYSTEM分区即ROM里的软件这里也会有!)
data& && && && &(软件的设置/参数/默认皮肤/图片等等,都在这里面,当然也包括SYSTEM分区ROM里的软件设置!)
-----------------------------------------------------------------------------------------------------------
APP 里面的软件主体文件,删除后手机软件消失,但下面的两个文件夹里的文件还会存在!
dalvik-cache 这个系统缓存文件夹,可以直接把这个文件夹删除,不要进去一个一个删,直接把这个文件夹删除!删除后要马上重启手机,不然手机里所有的软件都不可用!手机重启后这个文件夹后自动重新建立!(只建立目前手机里有的软件,以前删掉的就不会再建了)
data&&这个文件夹很麻烦,需要一定的智商与动手能力! -_-!!
来举个例子:打开R.E管理器,比如我要删除QQ的残留,首先你要知道QQ的&名称&...请看下图:
gnz9515w5rrr.png (237.1 KB, 下载次数: 120)
20:21 上传
图中com.tencent.mobileqq即为QQ在系统内的&名称&!!
dsd6y5ckpdvu6.png (220.42 KB, 下载次数: 101)
20:21 上传
UC为com.ucmobile
删除软件后可以再到DATA\DATA分区下删除对应的文件残留!
jasttthjaxaas.png (173.5 KB, 下载次数: 99)
20:21 上传
完全彻底删除手机里的内存!!!
兑换券0 元
在线时间24 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学六年级, 积分 3584, 距离下一级还需 2416 积分
木蚂蚁小学六年级, 积分 3584, 距离下一级还需 2416 积分
支持技术贴。
兑换券24 元
在线时间0 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学一年级, 积分 70, 距离下一级还需 30 积分
木蚂蚁小学一年级, 积分 70, 距离下一级还需 30 积分
法国德国的风格
推荐版块:
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
木蚂蚁官方微信:工信部昨日公布的电信服务质量通告显示,四季度对40家手机应用商店的应用软件进行了技术检测,共发现不良软件41款,涉及违规收集使用用户个人信息、恶意“吸费”、强行捆绑推广其他无关应用软件等问题。具体黑名单如下,看看你是不是中招了。友情提示:如有安装以上软件,请在第一时间卸载掉吧。TechWeb(TechWeb) 
 文章为作者独立观点,不代表大不六文章网立场
TechWeb提供权威新鲜的IT业界新闻,是新媒体、新技术、新商业互动平台热门文章最新文章TechWeb提供权威新鲜的IT业界新闻,是新媒体、新技术、新商业互动平台&&&&违法和不良信息举报电话:183-
举报邮箱:
Copyright(C)2016 大不六文章网
京公网安备78查看: 36061|回复: 12
手机商店里面下载过的软件删除了怎么在安装不了
如题.........................
能不能说祥细一点呀?什么软件,有什么提示?
楼主上图看下
我目测是你网络的事!
是软件删除后不再安装就不行了吗?是这个意思吗?
请等等 发表于
是软件删除后不再安装就不行了吗?是这个意思吗?
就是我商店里面下的软件,我把它给删除了,然后在安装那个软件就安装不了了
首先你删除的软件是什么?是自带的吗?然后检查确实网络方面没问题。。。。。
再次可能是系统的问题或者你之前删除的软件没有删干净。。。。
不好意思,知识有限,只能想到这些了。。。。
我也发现这个问题!!求解答
{123}恭喜你房东..
不能够的额
你在App Store里面下载不到是么?
Powered by
北京市公安局海淀分局网监中心备案编号:25361人阅读
Android(144)
最近好长时间都没有写blog了,主要是因为最近工作上的事以及下载Android源码的事耽误的(下载源码这件事会在后续的blog中写道,这个真的很有意义呀~~),那么今天来写点什么呢?主要的灵感来自于早上看新闻看到一篇文章说有一款应用在后台中卸载用户手机中的所有浏览器的app,不会被用户察觉,但是最后百度浏览器还是用反侦察技术找到这个邪恶的应用然后将其告上法庭了。那么我们就来看看怎么能够实现应用的静态安装和卸载呢?就是不让用户知道,下面就来一步一步的介绍一下实现步骤:一、访问隐藏的API方式进行静态的默认安装和卸载1.系统安装程序android自带了一个安装程序---/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用都是通过这个apk来安装的。代码使用也非常简单:/* 安装apk */
public static void installApk(Context context, String fileName) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse(&file://& + fileName),&application/vnd.android.package-archive&);
context.startActivity(intent);
/* 卸载apk */
public static void uninstallApk(Context context, String packageName) {
Uri uri = Uri.parse(&package:& + packageName);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
context.startActivity(intent);
}通过发一个Intent,把应用所在的路径封装整uri.之后默认启动了PackageInstaller.apk来安装程序了。但是此种情况下,仅仅是个demo而已,很难达到开发者的需求。如:1).界面不好2).被用户知晓3).什么时候安装完了,卸载完了呢?当然这里关于第三点的话,为了达到自己的需求,相信很多人都会接着来监听系统安装卸载的广播,继续接下来的代码逻辑。监听系统发出的安装广播在安装和卸载完后,android系统会发一个广播android.intent.action.PACKAGE_ADDED(安装)android.intent.action.PACKAGE_REMOVED(卸载)咱们就监听这广播,来做响应的逻辑处理。实现代码:public class MonitorSysReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
//接收安装广播
if (intent.getAction().equals(&android.intent.action.PACKAGE_ADDED&)) {
//接收卸载广播
if (intent.getAction().equals(&android.intent.action.PACKAGE_REMOVED&)) {
}AndroidManifest.xml文件中的配置:
&receiver android:name=&.MonitorSysReceiver&&
&intent-filter&
&action android:name=&android.intent.action.PACKAGE_ADDED& /&
&action android:name=&android.intent.action.PACKAGE_REMOVED& /&
&/intent-filter&
&/receiver&到此,确实安装卸载的整体流程都知道了,但是这个效果肯定是无法达到项目的需求。一般这种应用商店类(豌豆荚)的项目,肯定是会要自定义提示框效果的安装卸载功能,而不是调用系统的安装程序。那咱就要想法子实现静默安装、卸载咯。下面这种调用系统隐藏api接口来实现静默安装卸载,是比较大众靠谱的,实现自定义的提示界面(关于这个调用系统隐藏的api接口,我们在之前讲到如何获取手机电量的一篇文章中介绍过了)2.系统隐藏的api隐藏api,顾名思义,普通情况下肯定是调用不到的。翻翻源码\frameworks\base\core\java\android\content\pm目录下PackageManager.java,应该发现在注释行里有加上@hide声明。调用的安装下载接口如下:安装接口:public abstract void installPackage(Uri packageURI,IPackageInstallObserver observer, int flags,String installerPackageName);卸载接口:public abstract void deletePackage(String packageName,IPackageDeleteObserver observer, int flags);并且都是抽象方法,需要咱们实现。&看参数里IPackageInstallObserver &observer一个aidl回调通知接口,当前目录中找到这接口:package android.content.
* API for installation callbacks from the Package Manager.
oneway interface IPackageInstallObserver {
void packageInstalled(in String packageName, int returnCode);
}好吧,这里有现成的干货,咱拿过来直接用呗(当然如果没有源码的那就算了,那能实现的只是demo)。具体步骤:从源码中拷贝要使用的aidl回调接口:IPackageInstallObserver.aidl、IPackageDeleteObserver.aidl当然完全可以拷贝整个pm目录,这样就不会报错了。作者项目里面用到了pm,所以把PackageManager.java以及涉及到的一些文件也拷贝过来了,不然eclipse报找不到PackageManager对象。结构如下:注:此处的包名android.content.pm一定要和源码目录结构一致,不然源码里编译会提示找不到aidl接口。一切朝源码编译看齐此处有2种方式实现:1.直接只取IPackageDeleteObserver.aidl和IPackagerInstallObserver.aidl、IPackageMoveObserver.aidl等要使用的接口,然后通过bindService来和系统连接服务,然后直接调用接口即可(这种没有方式作者没试过,不过原理上来说应该是可行的,除非系统没有这个Service实现这个接口。有需求的可以深究下)2.作者此处的方法是直接拷贝了源码PackageManager.java等文件过来,不过靠过来之后eclipse会提示一些接口错误,但这里作者把上面那几个.java文件都放空了,因为用不到,只是为了编译过才拷贝了那么多文件。最简单的就是直接拷贝4个文件即可:PackageManager.javaIPackageDeleteObserver.aidlIPackagerInstallObserver.aidlIPackageMoveObserver.aidl然后把PackageManager.java中报的异常的接口都注释掉即可实现回调接口,代码如下:安装的回调接口:/*静默安装回调*/
class MyPakcageInstallObserver extends IPackageInstallObserver.Stub{
public void packageInstalled(String packageName, int returnCode) {
if (returnCode == 1) {
Log.e(&DEMO&,&安装成功&);
new ToastThread(InstallActivity.this,&安装成功&).start();
Log.e(&DEMO&,&安装失败,返回码是:&+returnCode);
new ToastThread(InstallActivity.this,&安装失败,返回码是:&+returnCode).start();
}安装的方法:String fileName = Environment.getExternalStorageDirectory() + File.separator + &baidu&+File.separator +&UC.apk&;
Uri uri = Uri.fromFile(new File(fileName));
int installFlags = 0;
PackageManager pm = getPackageManager();
PackageInfo pi = pm.getPackageInfo(&com.UCMobile&,PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
} catch (NameNotFoundException e) {
MyPakcageInstallObserver observer = new MyPakcageInstallObserver();
pm.installPackage(uri, observer, installFlags, &com.UCMobile&);从代码中可以看到我们想安装的是从SD卡中的baidu文件夹中的UC.apk(所以在测试程序的时候需要将UC.apk拷贝到SD卡中的baidu文件夹中,或者你可以自定义一个文件的存放目录)卸载原理是一样的卸载的回调接口:/* 静默卸载回调 */
class MyPackageDeleteObserver extends IPackageDeleteObserver.Stub {
public void packageDeleted(String packageName, int returnCode) {
if (returnCode == 1) {
Log.e(&DEMO&,&卸载成功...&);
new ToastThread(InstallActivity.this,&卸载成功...&).start();
Log.e(&DEMO&,&卸载失败...返回码:&+returnCode);
new ToastThread(InstallActivity.this,&卸载失败...返回码:&+returnCode).start();
}卸载的功能:PackageManager pm = InstallActivity.this.getPackageManager();
IPackageDeleteObserver observer = new MyPackageDeleteObserver();
pm.deletePackage(&com.UCMobile&, observer, 0);这里我们一定要传一个包名。自此,静默安装卸载代码实现。最后在AndroidManifast.xml中要注册权限和添加为系统用户组&manifest xmlns:android=&/apk/res/android&
package=&com.autoinstallpackage.demo&
android:versionCode=&1&
android:versionName=&1.0.19&
android:sharedUserId=&android.uid.system&&
&uses-sdk android:minSdkVersion=&4&/&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE&/&
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.INSTALL_PACKAGES& /&
&uses-permission android:name=&android.permission.DELETE_PACKAGES& /&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS&/&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
&uses-permission android:name=&android.permission.RECEIVE_BOOT_COMPLETED&/&
&/manifest&这里要注意的地方有两个:第一个必须要添加:android:sharedUserId=&android.uid.system&这个是将其应用注册成系统用户组中,如果不加这行代码的话,会出现报错,但是加了这行代码之后,如果还报错的话,重新clean一下项目就好了,这个是Eclipse的一个bug吧还要添加安装和卸载的权限:&uses-permission android:name=&android.permission.INSTALL_PACKAGES& /&
&uses-permission android:name=&android.permission.DELETE_PACKAGES& /&这时候上面的工作都做完之后,那么我们就来用Eclipse运行一下吧:好吧,貌似不是那么的顺利,出现一个安装错误,其实这个信息去百度一下之后会找到很多的相关资料,因为这个问题有很多人遇到过,所以解决的方法也是很多的,就是需要将我们的应用签名成系统级的即可,那么我们该怎么办呢?网上普遍的两种方法:第一种是:得到platform.pem,platform.x509.pem,signapk.jar这三个文件进行签名:签名的命令很简单:java -jar signapk.jar platform.x509.pem platform.pem&&需要签名的apk & 签名之后的apk下图是我签名的操作:第二种方法:很麻烦的,为什么说麻烦呢?因为需要下载源代码,然后将我们的应用拷贝到指定的目录即可:1.如果你有系统源码,最简单的就是将eclipse里面的应用拷贝到系统里面,然后编译系统,会生成out/target/product/generic/system/app/abc.apk,这个应用就是经过系统签名了。具体方法如下:将应用文件夹复制到源码目录:packages/experimental/project_name/里面,并且只保留src、res、libs、androidmanifest.xml这三个文件,里面新建一个Android.mk文件,内容如下:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := abcLOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)然后进行编译即可其实我们在将第一种方法的时候有一个问题就是那三个签名的文件到哪里能搞到,这个吗?可以到网上去搜索的,但是本人在下载下来然后进行签名,结果总是失败,于是,我就放弃了从网上去下载,那么还有什么方法可以得到呢?好吧,还得去下载Android源码,编译之后可以在指定的目录中找到这三个文件但是还没有完,不管是第一种方法还是第二种方法,我在试验的过程中还是失败,原因是什么呢?因为我们如果用这三个文件进行签名或者把工程放到源码中进行编译的话,都必须要注意一点:就是签名的文件的系统版本必须和安装到设备的系统的版本一样,说白一点:现在假如签名的那三个文件是从下载的编译之后的源码中得到的,那么这三个文件的版本就是这个Android源码的版本:比如是4.4版本的,那么我们用这三个文件进行签名之后的apk包只能安装到系统版本为4.4的机子上,同理如果我们将工程直接放到Android源码中进行编译的话,假如Android源码的系统版本是4.4,那么编译之后的apk也只能安装到系统版本为4.4的机子上。所以我们从网上下载到的签名的三个文件进行签名之后总是失败,所以这种方式总是不靠谱的,因为我们从网上下载的签名文件肯定不知道他的版本号,但是我们可以将签名之后的包安装到每个版本的系统中进行尝试,所以最靠谱的方式还是我们下载源码然后得到这三个签名的文件即可,因为我们自己下载的源码肯定知道版本的。这三个文件对应的目录是:signapk.jar: 源码目录/out/host/linux-x86/framework/signapk.jarplatform.pk8和platform.x509.pem: &源码目录/build/target/product/security/platform.pk8&platform.x509.pem当我们使用第一种方法的时候,我们需要用Eclipse中导出一个未签名的包,这个很简单了,这里就不介绍了~~运行的结果:因为手头上没有4.4系统的机子,又不想刷机,所以就用模拟器了。在这个过程中安装和卸载可能要一段时间,所以要等待一会,不要着急~~那么我们就介绍了使用隐藏的api来进行默认的安装和卸载app,Demo工程下载地址:导入工程之后,需要做的几步:在SD卡中拷贝一个UC.apk到baidu文件夹(需要新建的)导出未进行签名的包下载签名的工具:按照上面的签名步骤进行操作然后找到一个系统是4.4版本的测试机或者模拟器进行安装包(因为我的签名文件的版本是4.4)二、通过命令进行静态的默认安装和卸载1、需要签名文件,不需要root权限下面我们再来看一下如何使用命令的方式来实现默认的安装和卸载app,我们知道可以使用命令:adb install &apk文件adb uninstall &包名进行安装和卸载操作。我们在代码中可以使用Runtime类进行操作:Runtime.getRuntime().exec(&adb uninstall com.UCMobile&);或者ProcessBuilder:new ProcessBuilder().command(&adb&,&uninstall&,&com.UCMobile&).start(); 看到这两个类的区别在于,第一种是将命令一起写完,第二种是将命令用空格分隔,然后将其当做参数进行传递的,其实command方法的参数是一个String可变参数类型的但是我们执行上面的代码发现总是执行失败,结果才发现,这些命令执行的目录不是在shell层的,但是手机中执行的命令必须要在shell层中的,所以会有问题的,但是我们可以使用pm命令,比如我们使用PC端的命令行进行安装文件:&adb shell&pm install &apk文件其实上面的两行命令和&adb install &apk文件的效果一样但是如果想在手机上执行安装文件只能执行命令:pm install &apk文件(可以把pm命令的作用想成是脱离shell层来执行命令的)不多说了,下面就来看一下代码吧:/*
* m命令可以通过adb在shell中执行,同样,我们可以通过代码来执行
public static String execCommand(String ...command)
Process process=
InputStream errIs=
InputStream inIs=
String result=&&;
process=new ProcessBuilder().command(command).start();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
errIs=process.getErrorStream();
while((read=errIs.read())!=-1){
baos.write(read);
inIs=process.getInputStream();
while((read=inIs.read())!=-1){
baos.write(read);
result=new String(baos.toByteArray());
if(inIs!=null)
inIs.close();
if(errIs!=null)
errIs.close();
process.destroy();
} catch (IOException e) {
result = e.getMessage();
调用这个方法:protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String path = Environment.getExternalStorageDirectory() + File.separator + &baidu&+File.separator + &360MobileSafe.apk&;
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//安装apk,filePath为apk文件路径,如/mnt/sdcard/ApiDemos.apk
String result = execCommand(&pm&,&install&,&-f&,path);
Toast.makeText(MainActivity.this, &安装结果:&+result, Toast.LENGTH_LONG).show();
Button btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//卸载apk,packageName为包名,如com.example.android.apis
String result = execCommand(&pm&,&uninstall&, &com.qihoo360.mobilesafe&);
Toast.makeText(MainActivity.this, &卸载结果:&+result, Toast.LENGTH_LONG).show();
}在AndroidManifest.xml中的配置:&manifest xmlns:android=&/apk/res/android&
package=&com.xieyuan.mhfilemanager&
android:versionCode=&1&
android:versionName=&1.0&
android:installLocation=&internalOnly&
android:sharedUserId=&android.uid.system& &
也有:android:sharedUserId=&android.uid.system&这个在前面已经说过了,所以我们现在做的还是将其进行系统签名,具体方法就不多说了,同上下面是运行的结果图:Demo工程下载地址:下载之后的工程导入之后需要进行的几步操作和前面的是一模一样的,这里就不做解释了~~但是我们从上面的方法看到有一个弊端,还是需要系统签名,这个对于一般app来说是个限制,现在机型很多,系统的签名文件也都不一样,所以很难做到这种方式能够适配到所有的机型。那么还有另外的一种方法:2、不需要签名文件,但是需要root权限这种方式很简单和上面的没有太大的区别,就是将上面的命令放到su下面去执行就可以了。从这里我们可以看到,现在很多需要系统签名的或者是命令不能执行的,都会想到su环境中去执行以下。这里不多解释了,直接上代码:public static boolean RootCommand(String command){
Process process =
DataOutputStream os =
process = Runtime.getRuntime().exec(&su&);
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + &\n&);
os.writeBytes(&exit\n&);
os.flush();
process.waitFor();
} catch (Exception e){
Log.d(&*** DEBUG ***&, &ROOT REE& + e.getMessage());
} finally{
if (os != null){
os.close();
process.destroy();
} catch (Exception e){
Log.d(&*** DEBUG ***&, &Root SUC &);
}然后我们调用这个方法来执行命令即可:new Thread(){
public void run(){
RootCommand(&pm uninstall com.tencent.mm&);
}.start();这里就可以执行了,这种方式可以适配所有的机型,但是需要root权限,这个就比较麻烦了,但是现在很多安全应用大部分都是采用这种方式的三、拷贝/删除apk文件实现安装和卸载这个方式其实很简单,就是直接拷贝和删除文件即可。我们知道Android中安装的apk都是放在/data/app/目录下面的,所以我们可以将我们需要安装的apk放到这个目录下即可。注:这种方式是可以接收到安装和卸载的系统广播首先我们在设备的SD卡中存放一个待安装的apk:360MobileSafe.apk这里的目录可以随便选择的,我这里选择了SD卡的根目录这里为了看到明显的效果,我们在写一个Demo程序,来接收安装的广播后台监听广播的Service:package com.example.
import android.app.S
import android.content.I
import android.content.IntentF
import android.os.IB
public final class MyService extends Service {
public void onCreate() {
super.onCreate();
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme(&package&);
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(new InstallReceiver(), filter);
public IBinder onBind(Intent paramIntent) {
}用动态方式进行注册广播广播接收器:package com.example.
import android.content.BroadcastR
import android.content.C
import android.content.I
import android.util.L
public final class InstallReceiver extends BroadcastReceiver {
public void onReceive(final Context context, Intent intent) {
Log.i(&TTT&,&action:&+intent.getAction());
}开启服务:package com.example.
import android.os.B
import android.app.A
import android.content.I
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(this, MyService.class);
startService(i);
}还要记得在AndroidManifest.xml中进行注册服务:&?xml version=&1.0& encoding=&utf-8&?&
&manifest xmlns:android=&/apk/res/android&
package=&com.example.installpackage&
android:versionCode=&1&
android:versionName=&1.0& &
android:minSdkVersion=&8&
android:targetSdkVersion=&18& /&
&application
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme& &
android:name=&com.example.installpackage.MainActivity&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
&service android:name=&.MyService&&&/service&
&/application&
&/manifest&我们在PC端可以使用adb push XXX.apk /data/app/&&实现拷贝,但是在设备上这个命令不能执行。因为Android是底层是Linux系统,所以自带的有拷贝命令:1、安装操作1)、拷贝命令cp=&adb shell=&su=&cd /sdcard/=&cp 360MobileSafe.apk /data/app如图效果:在这个过程中,我们通过打印log信息可以看到,是有点耗时的。当然除了这种方式还有另外的一种方式:2)、使用cat命令实现我们知道cat命令有输出重定向的功能=&adb shell=&su=&cd /sdcard/=&cat 360MobileSafe.apk & /data/app/com.qihoo.360.apk运行结果:2、卸载操作卸载也很简单,我需要删除/data/app目录下指定的apk文件,但是我们知道,一个app安装好之后,不仅在这个目录中有数据,还有其他目录中也是有数据的:/data/davlik-cache/ & :存放释放的dex文件/data/data/com.qihoo.360.mobilesafe/ &:存放app的数据/data/system/packages.list &:这个文件是记录安装app的信息的/data/system/packages.xml &:这个文件是记录安装app的详细信息(权限,uid等)命令:=&adb shell=&su=&cd /data/app/=&rm 360MobileSafe.apk运行结果:总结上面就介绍了实现静态安装和卸载的功能,前面两种方法不需要root权限的,但是需要签名文件,这个对于不同机型,有不同的签名文件,(在第二种方法中的两种实现不同的,不需要签名文件,但是需要root权限)这个是件很头疼的事,第三种是不需要签名文件的,对于所有机型都适合,但是需要root权限的,现在很多安全软件在实现静默安装和卸载的时候也都是需要root权限才能进行操作的,而且每个机型上都是可以的。所以他们应该采用的是第二种方式中的第二种实现或者是第三种方式。注:前两种方式是不可以接受系统的安装和卸载广播的,第三种是可以接受系统的安装和卸载广播的。待解决的问题1. 上面我们可以看到我们使用的是4.4版本进行签名的,只能安装到系统是4.4版本的机子上,这个有待考证,因为我们开发的应用不可能只能装到指定的版本中,必须是所有的系统都能进行安装(比如豌豆荚就可以),所以我就做了一个假设,是不是低版本的签名文件进行系统签名之后的apk可以安装到高版本系统中,那么这样就好办了,我们可以下载Android2.2(因为现在市面上最低的版本是2.2了)源码,得到他的签名文件,或者从网上搜索到这个版本的签名文件(至今未找到,如果有找到的请分享,谢谢!!)2. 还有一个问题就是上述的测试环境都是在手机或者模拟器都是root过了,有待考证的是没有root的手机会不会安装时出现问题~~上述的blog是纠结了我几个月的时间才解决的,所以我真心想说的一句话就是:做事千万不要放弃,办法总比问题多,一定要坚持~~,其实上面遇到的最大的问题就是在下载源码过程(没有技术可言,就是考验我们的耐心,同时网络也是一个重要的原因,这里由于某些原因,我下载的是4.4版本的源码,共13G,这里就不公开下载地址了,如果真心需要请留言,我可以共享一下~~),还有就是编译过程,我花费了一周的时间,因为在这个过程中可以说是千难万险,什么问题都有,我重新编译好几次~~好吧,这里有现成的干货,咱拿过来直接用呗(当然如果没有源码的那就算了,那能实现的只是demo)。具体步骤:从源码中拷贝要使用的aidl回调接口:IPackageInstallObserver.aidl、IPackageDeleteObserver.aidl当然完全可以拷贝整个pm目因为手头上没有4.4系统的机子,又不想刷机,所以就用模拟器了。在这个过程中安装和卸载可能要一段时间,所以要等待一会,不要着急~~那么我们就介绍了使用隐藏的api来进行默认的安装和卸载app,Demo工程下载地址:导入工程之后,需要做的几步:在SD卡中拷贝一个UC.apk到baidu文件夹(需要新建的)导出未进行签名的包下载签名的工具:按照上面的签名步骤进行操作然后找到一个系统是4.4版本的测试机或者模拟器进行安装包(因为我的签名文件的版本是4.4)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
扫一扫加小编微信
添加时请注明:编码美丽!
我的第一个App: 天真无谐
已经上线了,在各大市场都可以搜索到。希望大家多多支持!!
访问:3343370次
积分:25565
积分:25565
排名:第194名
原创:237篇
评论:17036条
文章:29篇
阅读:349274
文章:23篇
阅读:218015
文章:25篇
阅读:355832
文章:30篇
阅读:277920
文章:64篇
阅读:894635
(3)(5)(4)(8)(7)(8)(5)(5)(8)(1)(4)(4)(2)(1)(4)(3)(2)(4)(1)(1)(1)(30)(9)(4)(7)(12)(3)(12)(13)(6)(20)(6)(32)(32)

我要回帖

更多关于 安装的软件找不到卸载 的文章

 

随机推荐