如何在Android7.0系统下怎样通过u盘安装系统Intent安装apk

7.0开发中Fileprovider在openFile中的使用,发现这篇博客写的已经很详细了,转载一下。
原文地址:
最近看到一个库,觉得有点意思,就编译了一下,结果发现打不开apk包,报错为:
Caused by: android.os.FileUriExposedException: file:12341234
看了下,估计是没有兼容android7.0的原因,这个作者的gradle设置的比较另类,我是第一次见,就没改,提交了issues,然后呢作者回复我让我改,估计他手头没有7.0的机器吧,我的也是前两天才升级了…&
在这里把解决步骤记录一下..&
1、在AndroidManifest.xml配置清单的Application中添加
android:name=&android.support.v4.content.FileProvider&
android:authorities=&cn.bingoogolapple.update.demo.fileprovider&
android:grantUriPermissions=&true&
android:exported=&false&
&meta-data
android:name=&android.support.FILE_PROVIDER_PATHS&
android:resource=&@xml/file_paths& /&
&/provider&1234567891012345678910
注意:cn.bingoogolapple.update.demo 是包名。。。&
2、在res资源文件下新建目录xml,在xml目录下新建file_paths.xml文件,内容如下:
&?xml version=&1.0& encoding=&utf-8&?&
&external-path path=&Android/data/cn.bingoogolapple.update.demo/&
name=&files_root& /&
&external-path path=&.& name=&external_storage_root& /&
&/paths&1234512345
注意:cn.bingoogolapple.update.demo 是包名..&
3、然后就是对安装apk方法的更改:
* 安装 apk 文件
public static void installApk(File apkFile) {
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(sApp, &cn.bingoogolapple.update.demo.fileprovider&, apkFile);
intent.setDataAndType(contentUri, &application/vnd.android.package-archive&);
intent.setDataAndType(Uri.fromFile(apkFile), &application/vnd.android.package-archive&);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (sApp.getPackageManager().queryIntentActivities(intent, 0).size() & 0) {
sApp.startActivity(intent);
}12345678910111213141516171819202122232425262728291234567891011121314151617181920212223242526272829
如果包名写错了会空指针。。。
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:560)
at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:534)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:376)12341234
最后结果自然是打开了安装页面啦…这个是在项目里面直接修改的,如果在library里面修改,步骤是一样的&
//////////////////////////////////系统截图/////////////////////////////////////////////&
日23:35:21&
如果你想下载这个demo来看看,点击下载,不过最好还是看作者的,相信他已经兼容了吧,哈&
下载地址:&
作者的github:/bingoogolapple/BGAUpdate-&
当前版本:&
http://download.csdn.net/detail/pkandroid/9714442&
————————–日16:44:11———————————–&
注意:如果AndroidManifest.xml中配置的provider的authorities名称不能重复,如果在别的APP中使用了这个provide的authorities属性(比如APP对于Android7.0之后的拍照的适配),那么这个APP可能会安装不上,提示卸载含有相同provider authorities属性的APP
本文已收录于以下专栏:
相关文章推荐
Android7.0安装文件的话默认会抛出FileUriExposedException
最近看到一个库,觉得有点意思,就下载源码编译了一下,结果发现打不开apk包,报错为:
Caused by: android.os.FileUriExposedException: file:...
最近项目中用到多图选择上传的需求,随后百度了一下用了别人写的demo,发现在很多机型上各种不适,闪退等问题,严复影响使用,后面我自己写了一个,公司20几款手机全部通过,在腾讯云测中也使用了4,50款手...
在安装Android应用时出现INSTALL FAILED CONFLICTING PROVIDER问题,是不是感觉很抓狂呢,下面就跟大家分享一下出现这个问题的原因及解决方案。问题原因在Android...
最近看到一个库,觉得有点意思,就下载源码编译了一下,结果发现打不开apk包,报错为:
//这个库的地址是:/bingoogolapple/BGAUpdat...
在做应用版本更新的时候使用Android 7.0的手机测试发现一个问题:下载完成安装包之后,不能跳转到安装界面,使用7.0以下的手机没遇到这种情况。
对于面向 Android 7.0 的应用,Andr...
升级到Android7.0之后,启动系统相机或者截图,传入URI的时候可能会导致闪退FileUriExposedException。使用FileProvider可以快速修复这个BUG...
处理FileProvider中android.content.res.XmlResourceParser错误。
//设置了超链接也不变色,还是直接写出来得了
Caused by: android.os.FileUriExposedException: file:///storage/emulated...
前几天发现一个问题,项目配置默认横屏,打开相机的时候,会出现闪退的现像。复现问题并打LOG。
从LOG中看出,
09-13 09:32:02.202 E/AndroidRuntime(11327)...
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)下载安装APK(兼容Android7.0) - 简书
下载安装APK(兼容Android7.0)
我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。
一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通过推送的自定义消息来实现。
我们这里主要讨论的是应用程序下载,并在通知栏提醒下载完成。实现过程大致分为三步:
创建一个service
在service启动的时候创建一个广播接受者,用于接受下载完成的广播
当BroadcastReceiver接受到下载完成的广播时,开始执行安装。
主要通过系统提供的DownloadManager进行下载,DownloadManager下载完成会发送广播,具体使用看下面完整的代码。如果详细了解可以参考下面创建新的文件DownloadService.java
public class DownLoadService extends Service {
/**广播接受者*/
private BroadcastR
/**系统下载管理器*/
private DownloadM
/**系统下载器分配的唯一下载任务id,可以通过这个id查询或者处理下载任务*/
/**TODO下载地址 需要自己修改,这里随便找了一个*/
private String downloadUrl="/download/daka.apk?v=3.0";
public IBinder onBind(Intent intent) {
public int onStartCommand(Intent intent, int flags, int startId) {
receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
install(context);
//销毁当前的Service
stopSelf();
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
//下载需要写SD卡权限, targetSdkVersion&=23 需要动态申请权限
RxPermissions.getInstance(this)
// 申请权限
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Action1&Boolean&() {
public void call(Boolean granted) {
if(granted){
//请求成功
startDownload(downloadUrl);
// 请求失败回收当前服务
stopSelf();
return Service.START_STICKY;
* 通过隐式意图调用系统安装程序安装APK
public static void install(Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW);
// 由于没有在Activity环境下启动Activity,设置下面的标签
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(
new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "myApp.apk")),
"application/vnd.android.package-archive");
context.startActivity(intent);
public void onDestroy() {
//服务销毁的时候 反注册广播
unregisterReceiver(receiver);
super.onDestroy();
private void startDownload(String downUrl) {
//获得系统下载器
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
//设置下载地址
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downUrl));
//设置下载文件的类型
request.setMimeType("application/vnd.android.package-archive");
//设置下载存放的文件夹和文件名字
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "myApp.apk");
//设置下载时或者下载完成时,通知栏是否显示
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setTitle("下载新版本");
//执行下载,并返回任务唯一id
enqueue = dm.enqueue(request);
上面代码使用了RxPermissions第三方库动态申请权限,需要在app/build.gradle文件中进行配置
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
compile 'io.reactivex:rxjava:1.1.6' //需要引入RxJava
记得要配置服务
&application
&service android:name=".DownLoadService"/&
&/application&
最后在MainActivity中添加按钮,执行操作。运行结果:
当下载的时候,会有通知栏进度条提示。下载完成会提示安装。不过当前程序如果在Android7.0上就会报错。下面是报错的日志:
Caused by: android.os.FileUriExposedException:
file:///storage/emulated/0/Download/myApp.apk exposed beyond app through Intent.getData()
这是由于Android7.0执行了“StrictMode API 政策禁”的原因,不过小伙伴们不用担心,可以用FileProvider来解决这一问题,
现在我们就来一步一步的解决这个问题。
Android 7.0错误原因
随着Android版本越来越高,Android对隐私的保护力度也越来越大。
比如:Android6.0引入的动态权限控制(Runtime Permissions),Android7.0又引入“私有目录被限制访问”,“StrictMode API 政策”。
这些更改在为用户带来更加安全的操作系统的同时也为开发者带来了一些新的任务。如何让你的APP能够适应这些改变而不是crash,是摆在每一位Android开发者身上的责任。
“私有目录被限制访问“ 是指在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。这点类似iOS的沙盒机制。
" StrictMode API 政策" 是指禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常。
上面用到的代码中的Uri.fromFile
其实就是生成一个file://URL。
intent.setDataAndType(Uri.fromFile(
new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS),
"myApp.apk")),
"application/vnd.android.package-archive");
一旦我们通过这种办法打开其它程序(这里打开系统包安装器)就认为file:// URI类型的 Intent 离开你的应用。这样程序就会发生异常。
接下来就用FileProvider来解决这一问题。
使用FileProvider
使用FileProvider的大致步骤如下:
第一步:在AndroidManifest.xml清单文件中注册provider,因为provider也是Android四大组件之一,可以简单把它理解为向外提供数据的组件,这种组件在实际开发中用的频率并不高,四大组件都可以在清单文件中进行配置。
&application
android:name="android.support.v4.content.FileProvider"
android:authorities="com.yll520wcf.test.fileprovider"
android:grantUriPermissions="true"
android:exported="false"&
&!--元数据--&
&meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" /&
&/provider&
&/application&
exported:要求必须为false,为true则会报安全异常。
grantUriPermissions:true,表示授予 URI 临时访问权限。
authorities 组件标识,按照江湖规矩,都以包名开头,避免和其它应用发生冲突。
第二步:指定共享的目录上面配置文件中 android:resource="@xml/file_paths"
指的是当前组件引用 res/xml/file_paths.xml 这个文件。
我们需要在资源(res)目录下创建一个xml目录,然后创建一个名为“file_paths”(名字可以随便起,只要和在manifest注册的provider所引用的resource保持一致即可)的资源文件,内容如下:
&files-path/&代表的根目录: Context.getFilesDir()
&external-path/&代表的根目录: Environment.getExternalStorageDirectory()
&cache-path/&代表的根目录: getCacheDir()
上述代码中path="",是有特殊意义的,它代码根目录,也就是说你可以向其它的应用共享根目录及其子目录下任何一个文件了。
如果你将path设为path="pictures",那么它代表着根目录下的pictures目录(eg:/storage/emulated/0/pictures),如果你向其它应用分享pictures目录范围之外的文件是不行的。
第三步:使用FileProvider上述准备工作做完之后,现在我们就可以使用FileProvider了。我们需要将上述安装APK代码修改为如下
public static void install(Context context) {
File file= new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
, "myApp.apk");
//参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致
共享的文件
Uri apkUri =
FileProvider.getUriForFile(context, ".yll520wcf.test.fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
// 由于没有在Activity环境下启动Activity,设置下面的标签
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//添加这一句表示对目标应用临时授权该Uri所代表的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
context.startActivity(intent);
上述代码中主要有两处改变:
将之前Uri改成了有FileProvider创建一个content类型的Uri。
添加了intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);来对目标应用临时授权该Uri所代表的文件。
上述代码通过FileProvider的Uri getUriForFile (Context context, String authority, File file)静态方法来获取Uri该方法中authority参数就是清单文件中注册provider时填写的authority
android:authorities="com.yll520wcf.test.fileprovider"
按照上面步骤修改就可以兼容Android7.0了。
后期修改,之前没有考虑7.0以下的版本
但是如果此程序在Android7.0以下运行又会报错了,我们需要通过版本判断,当Android7.0及以上需要调用上面的代码,Android7.0以下需要调用7.0以下的代码。这样就OK了。修改install() 方法代码。
* 通过隐式意图调用系统安装程序安装APK
public static void install(Context context) {
File file = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
, "myApp.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
// 由于没有在Activity环境下启动Activity,设置下面的标签
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if(Build.VERSION.SDK_INT&=24) { //判读版本是否在7.0以上
//参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致
共享的文件
Uri apkUri =
FileProvider.getUriForFile(context, "com.a520wcf.chapter11.fileprovider", file);
//添加这一句表示对目标应用临时授权该Uri所代表的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
context.startActivity(intent);
微信公众账号: likeDev
Android电子书:
CSDN博客地址:http://blog.csdn.net/yulianlin
转载自于连林 我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。 一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的一些心得分享给大家,让大家的应用能早...
Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的一些心得分享给大家,让大家的应用能早...
2017年已经过去了大半年,还有两个月就要迎接新的一年了,那么在2017年的这十个月里,有多少华语片是值得一看的呢?我这里整理了一份片单,主要包含在豆瓣七分左右或七分以上的佳片,共计十部。 好了,废话少说。 1.十万个冷笑话2 豆瓣:7.4 抖不完的包袱,说不尽的梗,笑到抽...
1 妈妈:.贤珠,是妈妈,妈妈写了那么多信。 女儿:你打错了吧。 妈妈:贤珠,拜托。 女儿:
电话挂了。 女儿:你知道作为一个杀人犯的女儿生活是多么痛苦多么辛苦吗? 妈妈:难道我死了,你才能原谅我吗? 女儿:谁叫你死了,死了你就解脱了,给我好好活着,死一般的活着,每天都像...
网络是一个巨大而且非常复杂的系统,我想很多人会和我一样好奇:从在浏览器中输入网址,到屏幕上显示出网页的内容,短短一两秒的过程中,那么多的硬件和软件到底是如何相互配合,完成工作的。 如果只看网络相关的教科书或者阅读某一篇博客,是很难达到这个目的的,因为总有一些含混不清的地方令...
周六了,虽然空气质量又下降,但是比红色预警要好多了。 一早起床,不想去跳舞,跳跃动作不熟练,怕老师批评。 在喵妈的鼓励下,终于开心上车了,其实从后来课上表现看,也还是不错的。 重新制定了训练计划,每次从最不熟的动作练起。 梳妆完毕,开始和同学们奔跑。 ...
对于整个童年都是被蓝胖子陪伴的我来说,当然不会放过任何能得到它的方式,这次从折纸走起。不管是大朋友还是小朋友,应该都对哆啦A梦非常熟悉吧~这只来自未来世界的猫型机器人,总是能够从自己神奇的四维百宝袋里,拿出各种奇妙的道具帮助倒霉、懦弱的小学生野比大雄解决各种困难。哆啦A梦的...如何在Android7.0系统下通过Intent安装apk_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
如何在Android7.0系统下通过Intent安装apk
我有更好的答案
看不太明白你的意思,不过这种情况往往是软件不兼容,换一下版本。或者是否需要root
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包如何在Android7.0系统下通过Intent安装apk_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
如何在Android7.0系统下通过Intent安装apk
我有更好的答案
面向 Android 7.0 或更高版本的应用私有目录被限制访问 (0700).net/czhpxl007/article/details/" target="_blank">http://blog。<a href="/ URI 可能给接收器留下无法访问的路径。因此,尝试传递 file:&#47。此设置可防止私有文件的元数据泄漏,如它们的大小或存在性://blog.csdn。分享私有文件内容的推荐方法是使用 FileProvider.传递软件包网域外的 file:// URI 会触发 FileUriExposedException为了提高私有文件的安全性
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;Android N对访问文件权限收回,按照Android N的要求,若要在应用间共享文件,您应发送一项 content://URI,并授予 URI 临时访问权限。&
而进行此授权的最简单方式是使用 FileProvider类。
1.在manifest中注册FileProvider
android:name=&android.support.v4.content.FileProvider&
android:authorities=&${applicationId}.provider&
android:exported=&false&
android:grantUriPermissions=&true&&
&/provider&
2、指定可用的文件路径
在项目的res目录下,创建xml文件夹,并新建一个file_paths.xml文件。通过这个文件来指定文件路径:
&?xml version=&1.0& encoding=&utf-8&?&
&paths xmlns:android=&/apk/res/android&&
&files-path name=&tangdada& path=&download/& /&
&external-path name=&tangdada& path=&download/& /&
有多种指定路径,在&paths&标签内应至少包含一种,或者多种。
a、表示应用程序内部存储区中的文件/子目录中的文件
&files-path name=&name& path=&image& /&
等同于Context.getFileDir() : /data/data/com.xxx.app/files/image
b、表示应用程序内部存储区缓存子目录中的文件
&cache-path name=&name& path=&image& /&
等同于Context.getCacheDir() : /data/data/com.xxx.app/cache/image
c、表示外部存储区根目录中的文件
&external-path name=&name& path=&image& /&
等同于Environment.getExternalStorageDirectory() : /storage/emulated/image
d、表示应用程序外部存储区根目录中的文件
&external-files-path name=&name& path=&image& /&
等同于Context.getExternalFilesDir(String) / Context.getExternalFilesDir(null) : /storage/emulated/0/Android/data/com.xxx.app/files/image
e、表示应用程序外部缓存区根目录中的文件
&external-cache-path name=&name& path=&image& /&
等同于Context.getExternalCacheDir() : /storage/emulated/0/Android/data/com.xxx.app/cache/image
3、引用指定的路径
在刚才Androidmanifest.xml中声明的provider进行关联:
android:name=&android.support.v4.content.FileProvider&
android:authorities=&${applicationId}.provider&
android:exported=&false&
android:grantUriPermissions=&true&&
&meta-data
android:name=&android.support.FILE_PROVIDER_PATHS&
android:resource=&@xml/file_paths& /&
&/provider&
所以最终安装apk的方法可以这么写了:
File apkfile = new File(mSavePath, mPackageNameString);
if (!apkfile.exists()) {
Intent i = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.N) { // 7.0&#43;以上版本
Uri apkUri = getUriForFile(mContext, mContext.getApplicationContext().getPackageName() &#43; &.provider&, apkfile); //与manifest中定义的provider中的authorities=&com.xinchuang.buynow.fileprovider&保持一致
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setDataAndType(apkUri, &application/vnd.android.package-archive&);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setDataAndType(Uri.parse(&file://& &#43; apkfile.toString()),
&application/vnd.android.package-archive&);
mContext.startActivity(i);
在网上找了好多方法 &最后参考stackoverflow里面的才最终解决
本文已收录于以下专栏:
相关文章推荐
Android跳转到应用安装界面的方法
调用系统的安装界面来安装 apk ,也就是说需要跳转 activity ,而且只能隐式启动,那就需要使用 Intent 并设置 action 和 data 等,这里需要的为 Intent 作如下设置....
Android7.0的系统上,进行安装apk, 会报这段错误。
> Caused by: android.os.FileUriExposedException...
应用中如何调用系统所装的软件打开一个文件,这是我们经常碰到的问题,下面是我所用到的一种方法,和大家一起分享一下!
这个是打开文件的一个方法:
* 打开文...
我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本...
因为SDK版本不同,所以有时我们在应该程序想要跳转到设置辅助页面,会报异常,程序会挂掉。有时会报找不到相关类,包是没问题的。后来在google查看了各个资料,各版本的sdk提供是有差异的,分别3.0以...
最近在研究Android动态加载APK技术,偶有小得,共享一下,欢迎交流。
首先是Android 动态加载已安装的APK
被调用工程TestB:
其工程已添加了字符串、颜色和图片资源,...
Android7.0兼容
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 通过u盘安装系统 的文章

 

随机推荐