下载apk到本地,安装遇到的解析包时出现错误的分析
遇到一些问题,使用代码的结果是无法满足自己的需求,很多时候是和手机本身的的一些权限和机制有关系。
问题1:下载apk到 内部存储,安装时无法找到路径,提示:解析包时发生错误
这个原因就是由于权限的原因,首先内部存储,在权限的原因下,默认为私有,内部存储所以只能本应用自己调用。而安装应用是PackagesInstaller和PackageManager系统的其他部分调用,就等于是外部应用调用的,所以是无法成功的,由于我的需求就是把apk存放到内部存储的固定目录下。
首先,可以设置权限的调用内部存储的方法有两个(参考连接:http://aijiawang-126-com.iteye.com/blog/792931 )
一个openFIleInput(String name,int mode),第一个参数是文件名字,不能带有“/”,意思就是不能是路径,必须是文件名,第二个参数是模式。
还有就是getDir()方法getDir(String name, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。
这个放在file下面好像是可以的。
然后就是使用android.app.ContextImpl.setFilePermissionsFromMode(String name,int mode,int extraPermissions);
还有就是android.os.FileUtils.setPermissions(String path, int mode, int uid, int gid);
这个两个类是系统内部类,在eclipse中编写,是无法正常调用的,因为你找不到包,最方便的方法就是利用反射。
大概发一个例子来简单总计下反射的使用,以及参数的含义。
public void setFilePathPermissions(String name, int mode,int extraPermissions) {Class<?> clazz;try {// 包名加类名clazz = Class.forName("android.app.ContextImpl");// 方法名Method method = clazz.getDeclaredMethod("setFilePermissionsFromMode", new Class[] { String.class,int.class, int.class });method.invoke(null, name, mode, extraPermissions);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}
首先Class.forName中的参数,是类的全名加上包名。
getDeclaredMethod方法中的第一个参数是方法名,第二个参数,是个参数数组,就比如setFilePermissionsFromMode方法有三个参数, 后面就追加三个参数,可以像上面那样写个数组,中间有三个元素,
clazz.getDeclaredMethod("setFilePermissionsFromMode", new Class[] { String.class,int.class, int.class });
也可以把数组显示去掉,如下
clazz.getDeclaredMethod("setFilePermissionsFromMode", String.class,int.class, int.class );
所需要反射的方法的参数有几个,就写几个,是什么类型,就调用类型.class的方法。记住,int和integer是不一样的。
method.invoke(null, name, mode, extraPermissions);其实也是两个参数模式,如果方法是static的话,第一个参数,就设置为null,否则写成clazz.newInstance(),
后面三个参数,本身和上面类型.class是一个意思,也是一个数组,这是就是直接写的方式,把三个参数传进来就ok了。
如果该方法没有返回值,你自己创建的方法名的返回值类型就写void就行了。
还有自己用模拟器测试的时候,可以用adb打开应用下包名的权限,必须是一级一级目录的打开。变成外部可读写的默认。
下面是用adb设置过程:
abd root
adb remount(成功会显示remount success)
adb shell(会变成root@android:/#)
cd data/data
ls(查看清单)
cd 目录(进入包名,进入各个文件夹)
ls -la (会查看到下面的文件,权限信息也会显示)
cd .. (回退,和git一样)
chmod -R 777 (要给权限的目录)
ls -la (查看就会发现权限改了)
ctrl +c (退出)
其实把apk下载到外部路径下是可以调用安装的。
还有我为了满足需求,采用的方法是,把文件下载到本地自定义目录,然后copy到外部路径,然后从外部路径调用安装,随后把它删除掉。
今天学了单例模式,到现在才明白。
想一直保存一个值,然后每次启动的时候,就会新建一个对象,然后调用的又是默认值,最后无法满足需求。
public class Contance {public boolean flag = true;private static Contance mInstance = null;public static Contance getInstance() {if (mInstance == null) {mInstance = new Contance();Log.i("test_pass", "new instance");}Log.i("test_pass", "mInstance");return mInstance;}
}
这是一个例子,所谓单例就是一个目的,所谓的单,就是只有一次,就是只新建一次对象,
当我调用flag的时候,不是每次都默认的true,我想改变起状态,并且保留这个值,这样就用到了单例模式。
我此时就这样写Contance.getInstance().flag;
在调用getInstance的时候,会传进来一个实例,判断这个实例是不是null,如果是空,就是没有创建过,此时就new。如果不是空, 说明已经new过了,就把当前的实例return,这样就只需要new一次,这就是单例模式。
还有Settings.system.putInt();在receiver是不能调用的,此时因为进程不是system进程,所以无法调用system的写方法,但是geiInt是可以调用的。
android:sharedUserId="android.uid.system"
此时还有adb命令,用于应用重启生效。先在手机上设置开发者模式,在开启adb调试,
然后adb中执行如下命令:
adb root
abd remount
adb push 应用路径 /system/app
adb reboot (重启)
下载apk到本地,安装遇到的解析包时出现错误的分析相关推荐
- python3安装包是说解压数据出错怎么办_安装软件出现“解析包时出现错误”怎么办?...
展开全部 总结:安装包损坏,重新搜索下载.手机e69da5e887aa3231313335323631343130323136353331333431373836内存不足,清理一下手机重新安装app版 ...
- 用java下载apk解析包出错_安装apk解析包时出现错误怎么办
安装apk解析包时出现错误怎么办 安装apk解析包时出现错误怎么办相信许多使用Android智能手机的用户都会或多或少的遇到到这样的问题--"解析包时出现错误".那么遇到这样的问题 ...
- apk部分手机安装失败_安装apk解析包时出现错误怎么办?小编快速帮你解决
Android智能手机的用户都会或多或少的遇到到这样的问题--"安装apk解析包时出现错误".那么遇到这样的问题该如何解决?其实导致apk程序安装失败的原因是多方面的,而这所有的错 ...
- matlab在sin处出现解析错误,破除“解析包时出现错误”方法大全,全部都在这了!...
原标题:破除"解析包时出现错误"方法大全,全部都在这了! 相信许多使用Android设备的用户都会或多或少的遇到到这样的问题:解析包时出现错误.那么遇到这样的问题该如何解决? 其实 ...
- android之解析包时出现错误(二)
为什么是二呢,之前遇到过一次了,详见http://blog.csdn.net/jason0539/article/details/12222173 这次的原因不同,再记录下 public class ...
- matlab在tic处出现解析错误,破除“解析包时出现错误”方法大全,全部都在这了!...
原标题:破除"解析包时出现错误"方法大全,全部都在这了! 相信许多使用Android设备的用户都会或多或少的遇到到这样的问题:解析包时出现错误.那么遇到这样的问题该如何解决? 其实 ...
- 安装apk解析包时出现错误(应用内更新)
最近遇到一个问题,有个别用户在应用内更新版本会出现解析包失败的情况,而且有的机型还是必现,浏览器下载就没问题,应用内就有问题,这就很让人费解,之前一直没关注过这种情况,但是用户就是上帝,有问题必须得解 ...
- 【Android开发】app升级报错,解析包时出现错误(华为手机8.0系统)
问题描述: 今天发布app版本升级,碰到华为手机8.0系统,安装升级的时候提示,解析包时出现问题.而其他手机都是正常的.而且当我的包没有经过360加固的时候,也是可以去升级新版本,加固过后就不行了. ...
- Android7.1.1手机使用android studio开发时出现解析包时出现错误的问题
在工作的时候,使用android studio开发,调试工具是android7.1.1手机vivo x20,遇到我每次不管run自己的项目,还是我新建一个Hello World的demo也都是不行.一 ...
最新文章
- MPB:地大郭东毅等-一种针对重金属污染土壤的高效DNA提取方法
- linux怎样优化桌面,简单优化设置Ubuntu 18.04系统的GNOME桌面
- 从 2017 OpenStack Days China 看国内云计算的发展现状
- git submodule 删除及更新URL
- LAMP 全功能编译安装 for CentOS6.3笔记(更新)
- 为什么要选择Apache Pulsar(二)
- 面向消费者的自动文本分析(Automated Text Analysis for Consumer Research) 2017 JCR 论文阅读
- java如何编译运行?
- apache自定义虚拟主机日志格式
- Linux在线升级ruby
- 牛客网算法题目-最优乘车题解
- 直播APP源码网络基础部分处理:
- 输入快递单号自动识别快递公司的方法
- 【无限互联】学员作品 豆果美食IOS客户端
- 明源售楼系统技术解析—诚意认购(一)
- 微信JSSDK invalid signature签名错误的解决方法
- 前端实现文件在线预览功能
- 【MATLAB】基础01
- Android 4.0 源代码结构
- 《ROS2机器人建模URDF》8.4控制移动机器人轮子运动