精华内容
下载资源
问答
  • 1.禁止adb命令安装apk 修改位置:frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java --- frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java (revision 1118) +++ frameworks/base/cmds/...

    1.禁止adb命令安装apk

    修改位置:frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java

    --- frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java	(revision 1118)
    +++ frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java	(revision 1119)
    @@ -84,6 +84,7 @@
     import java.util.WeakHashMap;
     import java.util.concurrent.SynchronousQueue;
     import java.util.concurrent.TimeUnit;
    +import android.os.SystemProperties;
     
     public final class Pm {
         private static final String TAG = "Pm";
    @@ -1049,7 +1050,8 @@
             String originatingUriString = null;
             String referrer = null;
             String abi = null;
    -
    +		boolean allowInstall = false;
             while ((opt=nextOption()) != null) {
                 if (opt.equals("-l")) {
                     installFlags |= PackageManager.INSTALL_FORWARD_LOCK;
    @@ -1085,6 +1087,8 @@
                         System.err.println("Error: must supply argument for --referrer");
                         return 1;
                     }
    +			}else if (opt.equals("-a")){
    +				allowInstall = true;
                 } else if (opt.equals("--abi")) {
                     abi = checkAbiArgument(nextOptionData());
                 } else if (opt.equals("--user")) {
    @@ -1094,6 +1098,13 @@
                     return 1;
                 }
             }
    +		if(!allowInstall){
    +           System.err.println("Error: Unknown apk");
    +           return 1;
    +		}

    当执行adb命令安装apk时,系统会调用Pm.java中的runInstall方法,同时检测user使用的opt参数,再走安装流程(此处不再赘述具体安装流程)。如果在这段代码中能提前return退出程序,那么就无法执行安装流程,此时增加一变量allowInstall,只有当user

    使用-a参数(默认无-a命令安装apk)才能成功安装apk。否则终端将输出"Error: Unknown apk"。至此,成功实现禁止adb命令安装apk。

    2.禁止手动安装apk

    所谓的手动安装apk指的是将apk拷贝到T卡或者sdcard下进行手动安装。该过程会调用系统的PackageInstaller模块。要实现禁止安装apk,具体修改位置:packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java

    ===================================================================
    --- packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java	(revision 1118)
    +++ packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java	(revision 1119)
    @@ -54,6 +54,7 @@
     
     import java.io.File;
     import java.util.List;
    +import android.os.SystemProperties;
     /*
      * This activity is launched when a new application is installed via side loading
    @@ -110,6 +111,7 @@
         private static final int DLG_INSTALL_ERROR = DLG_BASE + 4;
         private static final int DLG_ALLOW_SOURCE = DLG_BASE + 5;
         private static final int DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES = DLG_BASE + 6;
    +    private static final int DLG_FORBID_APPS = DLG_BASE + 7;//for forbid install apk
     
         private void startInstallConfirm() {
             TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
    @@ -333,6 +335,20 @@
                         })
                         .setOnCancelListener(this)
                         .create();
    +        case DLG_FORBID_APPS:
    +            return new AlertDialog.Builder(this)
    +                    .setTitle(R.string.forbid_apps_dlg_title)
    +                    .setMessage(R.string.forbid_apps_dlg_text)
    +                    .setPositiveButton(R.string.ok,new DialogInterface.OnClickListener(){
    +                        @Override
    +                        public void onClick(DialogInterface dialogInterface, int i) {
    +                            finish();
    +                        }
    +                    })
    +                    .setOnCancelListener(this)
    +                    .create();
            }
            return null;
        }
    @@ -481,6 +497,16 @@
             mInstallFlowAnalytics.setInstallRequestFromUnknownSource(requestFromUnknownSource);
             mInstallFlowAnalytics.setVerifyAppsEnabled(isVerifyAppsEnabled());
             mInstallFlowAnalytics.setAppVerifierInstalled(isAppVerifierInstalled());
    +        if (mPackageURI == null) {
    +            Log.w(TAG, "invalid URI");
    +            setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI);
    +            mInstallFlowAnalytics.setFlowFinished(
    +                    InstallFlowAnalytics.RESULT_FAILED_UNSUPPORTED_SCHEME);
    +            finish();
    +            return;
    +        }
             mInstallFlowAnalytics.setPackageUri(mPackageURI.toString());
     
             final String scheme = mPackageURI.getScheme();
    @@ -564,7 +590,18 @@
                 mInstallFlowAnalytics.setFlowFinished(
                         InstallFlowAnalytics.RESULT_BLOCKED_BY_UNKNOWN_SOURCES_SETTING);
             } else {
    -            initiateInstall();
    +            if (!SystemProperties.getBoolean("ro.product.installApk", true)){
    +                showDialogInner(DLG_FORBID_APPS);
    +                mInstallFlowAnalytics.setFlowFinished(
    +                        				 InstallFlowAnalytics.RESULT_BLOCKED_BY_UNKNOWN_SOURCES_SETTING);
    +                return;
    +
    +            }else{
    +                initiateInstall();
    +            }
             }
         }

     

    展开全文
  • Android7.0安装apk导致的FileUriExposedException异常 问题描述 解决方案 Android8.0安装apk无法跳转到正常的APP安装页面 问题描述 解决方案 安装apk时弹出“选择打开方式”让用户选择而不是直接跳转到APP安装...

    目录

    Android7.0安装apk导致的FileUriExposedException异常

    问题描述

    解决方案

    Android8.0安装apk无法跳转到正常的APP安装页面

    问题描述

    解决方案

    安装apk时弹出“选择打开方式”让用户选择而不是直接跳转到APP安装界面

    问题描述

    解决方案

    安装apk代码示例


    最近在做一款APP,做自动更新的时候,安装apk遇到了一些问题:

    • FileUriExposedException异常;

    • 无法跳转到APP安装页面,无法进行版本更新升级;

    • 在下载完成,进行安装的时候,总是弹出“请选择以下打开方式”让用户选择一个打开方式进行安装,一旦选择不对则无法安装。

    下面我们逐一分析解决。

    Android7.0安装apk导致的FileUriExposedException异常

    问题描述

    在Android7.0中为了提高私有文件的安全性,Google做了私有目录限制访问,面向Android-N或者更高版本的私有目录被限制访问,有点类似于IOS的沙盒机制,此设置可防止私有文件的元数据泄漏。禁止像你的应用外公开file://uri,如果某一项包含file://uri类型的Intent被外部执行的时候,比如说安装App(从file://uri获取apk文件进行安装)、拍照(向file://uri存取照片)就会导致安全异常FileUriExposedException,下面是我的错误代码以及报错日志:

    安装App的代码

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file://" + apkfile.toString()),
                        "application/vnd.android.package-archive");
    mContext.startActivity(intent);

     

    解决方案

    方案一,使用严格模式(在Application中添加以下代码)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
    }
    

    方案二,使用FileProvider

    首先在配置清单文件(AndroidManifest.xm)中测注册一个provider

        <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="com.houbin.test.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_paths" />
        </provider>

    注意:

    • exported:要求必须为false,为true则会报安全异常。
    • grantUriPermissions:true,表示授予 URI 临时访问权限。
    • authorities 组件标识,按照江湖规矩,都以包名开头,避免和其它应用发生冲突。

    然后资源目录(res)下创建xml目录,并在xml目录下创建一个xml文件,名字要跟AndroidMaifest.xml文件中注册的provider引用的resource保持一致。

    创建file_paths.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <external-path
            name="files_root"
            path="Android/data/com.herenit.webdoc/" />
        <external-path
            name="external_storage_root"
            path="." />
    </paths>

    <external-path/>代表的根目录: Environment.getExternalStorageDirectory()

    <external-path name="files_root"  path="Android/data/com.houbin.test/" />

    表示路径为:Environment.getExternalStorageDirectory()+"Android/data/com.houbin.test/",起名字为files_root。

    最后要在代码中做Android7.0兼容,使用FileProvider代替file://url的Uri

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri contentUri = FileProvider.getUriForFile(mContext,BuildConfig.APPLICATION_ID+ ".fileprovider", apkfile);
        intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        mContext.startActivity(intent);
    }

    其中BuildConfig.APPLICATION_ID+".fileprovider",表示“APP包名.fileprovider”,即前面AndroidManifest.xml注册的provider的authorities节点的值com.houbin.test.fileprovider。

    注意,在FileProvider.getUriForFile()方法的源码已经明确指出,需要Intent设置flag添加权限FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION权限,如果这里缺少intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);这句代码时,还是会抛出FileUriExposedException异常的。

     

    Android8.0安装apk无法跳转到正常的APP安装页面

    问题描述

    当用户要从除了官方应用商店之外的来源安装App时(安装位置来源的APP):

    Android8.0(Android-O)之前:可以被安装,或者需要打开系统设置当中“安装未知应用”权限,或者会有弹窗给用户一个提示。;Android8.0之后,Google进一步加强了权限管理,“安装未知应用”权限的永久开关被移除掉,每次当用户安装位置来源的App时,都需要单独授权并且对软件权限进行手动确认,这样的设计避免了被引诱安装带来的危害。当我们在Android8.0上安装位置来源Apk时,如果不进行设置或者代码控制,是不会跳转到系统App安装界面,就会导致App无法安装。

    解决方案

    方案一,用户自己设置

    例如在华为8.0系统手机上,用户可以通过打开 “设置->安全和隐私->更多安全设置->安装未知应用”找到要更新的应用,然后点击打开操作界面,设置“安装未知应用”状态为“允许”即可,如下图所示:

             

    是不是很不方便?如果我们的软件以这样的方式给用户升级更新,那就体验太差了。请看另一种解决办法。

    方案二,代码兼容Android8.0

    首先在AndroidManifest.xml清单文件中添加安装未知来源的权限

     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

    然后在代码中兼容Android8.0

    if (android.os.Build.VERSION.SDK_INT >= 26) {
        boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
        if (!hasInstallPermission) {
            //请求安装未知应用来源的权限
            ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 6666);
        }
    }

    这样在系统安装App页面的时候,会弹出选择框,让用户手动选择是否同意安装位置来源的应用,这个是无法避免的。如果到这一步,用户还要选择“禁止”,那在下实在没办法了~ ~ ~

    安装apk时弹出“选择打开方式”让用户选择而不是直接跳转到APP安装界面

    问题描述

    当Android系统版本比较高的时候,在有些机型上,会出现这样的情况,每次安装下载好的APK文件时候,不会直接跳转到系统的安装界面,而是先弹出一个“打开方式的弹窗”让用户选择打开,如果选择的是打包安装程序之类的应用来打开APK,那么会成功跳转到系统安装Apk界面,否则不会安装成功。

    解决方案

    遇到这种情况,请检查一下安装apk的代码,是不是缺少打开相应Activity的Action?为了保险起见,在写安装apk代码的时候,要有如下代码,否则有可能就会出现上述问题

    intent.setAction(Intent.ACTION_VIEW);

    安装apk代码示例

       /**
         * 安装APK文件
         */
        private void installApk() {
            File apkfile = new File(mSavePath, apkName);
            if (!apkfile.exists()) {
                return;
            }
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Uri contentUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".fileprovider", apkfile);
                intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
                //兼容8.0
                if (android.os.Build.VERSION.SDK_INT >= 26) {
                    boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
                    if (!hasInstallPermission) {
                        //请求安装未知应用来源的权限
                        ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 6666);
                    }
                }
            } else {
                // 通过Intent安装APK文件
                intent.setDataAndType(Uri.parse("file://" + apkfile.toString()),
                        "application/vnd.android.package-archive");
            }
            if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {
                mContext.startActivity(intent);
            }
        }

    个人总结的一点小东西,欢迎各位大神批评指正

    展开全文
  • Android安装APK

    千次阅读 2019-05-07 14:35:03
    android安装APK android7.0内容提供者 android8.0权限

    1.AndroidManifest权限设置

    <!-- android8.0安装APK必备权限 -->
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

    2.创建 android7.0 文件提供者

    1. 在res文件夹下创建xml文件夹
    2. 在xml文件夹下创建 file_paths.xml 文件 文件内容如下:
      <?xml version="1.0" encoding="utf-8"?>
      <paths xmlns:android="http://schemas.android.com/apk/res/android">
          
          <!-- 代表设备的根目录 new File("/") -->
          <root-path name="root" path="" />
      
          <!-- 代表 context.getFileDir() -->
          <files-path name="files" path="" />
      
          <!-- 代表 context.getCacheDir() -->
          <cache-path name="cache" path="" />
      
          <!-- 代表 Environment.getExternalStorageDirectory() -->
          <external-path name="external" path="" />
      
          <!-- 代表 context.getExternalFilesDirs() -->
          <external-files-path name="name" path="path" />
      
          <!-- 代表 getExternalCacheDirs() -->
          <external-cache-path name="name" path="path" />
      </paths>
      <external-path name="external" path="pics"/>

      代表的目录即为:Environment.getExternalStorageDirectory()/pics 

    3. 在AndroidManifest.xml添加文件提供者
              <provider
                  android:name="android.support.v4.content.FileProvider"
                  android:authorities="你的包名.fileProvider"
                  android:exported="false"
                  android:grantUriPermissions="true">
                  <meta-data
                      android:name="android.support.FILE_PROVIDER_PATHS"
                      android:resource="@xml/file_paths" />
              </provider>

       

    4. 放大g
    5. gy
    6.  

    3.正式安装

        private void detectionVersions() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                //获取是否有权限
                boolean jurisdiction = getPackageManager().canRequestPackageInstalls();
                if (jurisdiction) {
                    //开始安装
                    installApk();
                } else {
                    //没有权限,申请权限
                    ActivityCompat.requestPermissions((Activity) MainActivity.this, new String[]{android.Manifest.permission.REQUEST_INSTALL_PACKAGES}, 3);
                }
            } else {
                //开始安装
                installApk();
            }
        }

     

        //安装应用
        public void installApk(File binaryFile) {
            //判断版本大于等于7.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Intent intent = new Intent();
                intent.setAction(android.content.Intent.ACTION_VIEW);
                String applicationId = getPackageName() + ".fileProvider";
                Uri uri = FileProvider.getUriForFile(MainActivity.this, applicationId, binaryFile);
                //给目标应用一个临时授权
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.setDataAndType(uri, "application/vnd.android.package-archive");
                startActivity(intent);
            } else {
                Intent intent = new Intent();
                intent.setAction(android.content.Intent.ACTION_VIEW);
                Uri uri = Uri.fromFile(binaryFile);
                intent.setDataAndType(uri, "application/vnd.android.package-archive");
                startActivity(intent);
            }
        }

     

    展开全文
  • Android ADB安装apk

    千次阅读 2018-08-21 10:38:42
    Android ADB安装apk 命令如图: 即adb install 后面跟着apk完整路径,如果安装成功会输出Success。

    Android ADB安装apk

    命令如图:

    即adb install 后面跟着apk完整路径,如果安装成功会输出Success。

    展开全文
  • Android intent安装apk

    千次阅读 2019-04-11 14:43:21
    intent 安装apk 偶然遇到了用intent的安装apk的现象 随手查了下 在此记录下 代码 /** * 安装apk * * @param context * @param apkPath */ public static void installApk(Context context, String apkPath...
  • adb安装apk命令

    千次阅读 2018-12-27 17:08:37
    adb连接上的情况下,可通过adb install -r packagename.apk安装apk至安卓系统
  • adb强制安装apk

    千次阅读 2020-12-15 15:02:35
    在设备上强制安装apk。 在app已有的情况下使用-r参数 在app版本低于现有版本使用-d参数 命令 adb install -r -d xxx.apk
  • 自动更新之安装apk

    万次阅读 2018-08-15 11:38:09
    apk内部自动更新,下载apk后安装apk的逻辑,优点就是安装过程中,不会回退到桌面(有闪退的效果,其实不是闪退,是APP原来的进程被杀死了),安装完成后能显示完成和打开,且适配安卓7.0 //安装下载后的apk文件 ...
  • 关于华为mate9安装apk缺少证书的问题(更新版)

    万次阅读 热门讨论 2017-10-17 11:07:56
    关于华为mate9安装apk缺少证书的问题前段时间新的项目里面打包上传了,突然说老板朋友手机华为mate9无论无核不能安装apk,一看截图如下面效果:意思是说缺少华为的证书,apk传到任何市场都没有用,都无法安装,我...
  • Python安装apk

    千次阅读 2018-03-20 15:14:51
    #_*_ coding:utf-8 _*_ import os import time import subprocess from nt import chdir COMMEND1 = 'aapt dump badging ' COMMEND2 = ' | findstr package' PREPATH = os.path.abspath('.') + '/...#安装APK de...
  • adb安装apk

    万次阅读 2020-04-14 13:27:11
    APP安装-将多个APK推送到一个包的设备上并安装它们 adb install-multiple test.apk test2.apk 应用程序安装-将一个或多个包推送到设备上,并以原子方式安装它们。 adb install-multi-package test.apk demo.apk ...
  • pm命令安装apk

    千次阅读 2019-03-12 15:51:52
    安装apk有很多种方法,除了常见的打开开发者中心–debug模式 ① 使用adb命令 adb install apk路径 ② 使用串口工具【Android P之前】,连接之后,su,然后使用pm进行安装: pm install -r apk路径 ② 使用串口工具...
  • Android手机安装apk 提示应用未安装

    千次阅读 2020-01-11 12:45:59
    手机安装不上apk原因各有不同 原手机已经安装了高版本apk,无法安装低版本...安装apk签名问题 【容易排查】 手机空间满 【概率较小】 排查问题,建议连接usb,通过log排查。依赖手机上提示信息,无法快速定位 ...
  • 一开始是以为是获取手机通讯录权限的问题,把代码都删掉,再次安装apk。华为这种检测奇特,你一开始装apk不会马上提示病毒,过段几个小时,要么到第二天才能知道apk会不会报。删掉通讯录权限后还是一样提示,开始...
  • gradle 实现安装apk 启动apk的方法

    千次阅读 2016-06-06 15:29:58
    gradle 实现安装apk 启动apk的方法有时候需要手动通过gradle安装apk 启动apk 使用方法-》gradlew startdemo -q【执行成功】 task installApkFiles(type: Exec){ def purposeDir = "$buildDir/outputs/apk/" ...
  • Andoid:静默安装apk

    千次阅读 2020-09-26 11:53:28
    以下方法可以可以实现静默安装apk, 不过没办法具体判断apk是否安装成功 public static boolean installApp(String apkFilePath) { LogUtil.Logd("installApk apkFilePath:" + apkFilePath); File file = new File...
  • Android adb 安装 apk无法安装错误排查

    千次阅读 2018-08-03 11:28:11
    用锤子安装一个apk包,死活安装不上,直接安装apk报错【apk包解析错误】,然后换成apk安装,adb报安装失败 但是nuex模拟器和华为手机都没有问题。一度怀疑是锤子系统问题~ 问题解决分析 找到一个利用adb分析...
  • 批处理脚本 批量安装APK

    千次阅读 2015-07-08 11:55:24
    系统开发测试过程中,需要大量安装apk时,常常需要使用工具批量安装。市面上也有一些这样的工具。 当然,自己做一些简单的脚本也是比较方便的。 我们知道,使用adb安装和卸载apk的命令如下: 安装apk: adb ...
  • Android 版本更新安装apk

    千次阅读 2019-04-02 10:27:49
    Android 安装更新apk 版本更新是每个安卓应用都会涉及的,当有新的版本更新下载后,调用系统安装程序安装新的apk... * 安装apk * * @param context * @param path 本地apk路径 */ public static void in...
  • 使用adb命令安装apk到手机

    万次阅读 2019-06-13 14:28:53
    第一步 让真机与电脑相连 , cmd打开dos命令窗口 ( 打开cmd的快捷键是Windows +...紧接着就可以安装apk了 . 首次要知道自己的apk放在哪个盘符的文件里了 . 比如我的apk放在E:\data里. 进入apk文件所在的目录: 输入...
  • android 7.0安装apk

    千次阅读 2018-03-25 13:57:08
    今天做项目中的版本更新功能,竟然发现以前安装apk的代码在Android7.0中用不了,于是乎各种百度,终于解决了这个问题,故在此与大家分享,希望能帮到大家。 Android系统升级到7.0之后,安全性提高了不少,直接使用...
  • 使用adb命令安装apk

    万次阅读 2018-06-28 21:11:59
    但是恶心人的微信会对直接发送的apk应用程序重命名,默认加“ .1”,让我们不能用手机直接安装apk。所以我想到了通过电脑来安装,用电脑微信接收apk文件,使用adb命令安装apk,具体步骤如下:1.使用数据线连接手机与...
  • 安装apk文件

    千次阅读 2012-11-18 03:19:15
    1 将platform-tools下的adb.exe配置到环境变量中如  .;C:\Development\android-sdk-windows\platform-tools 2 运行cmd运行adb+回车...3 配置成功后即可安装apk.命令:adb install+apk文件所在路径(路径最好不含中文)
  • 命令行中使用adb安装apk

    千次阅读 2016-07-05 17:32:36
    命令行中使用adb安装apk
  • 使用ADB安装apk安装包

    千次阅读 2019-08-27 16:46:00
    1.手机通过USB线连接到电脑,并打开开发者选项和USB调试,...3.安装apk包命令:adb -s [device_num] install [apk_path] ,需要换成自己的设备编号和apk路径地址。 4.卸载apk包命令:adb -s [device_num] unins...
  • 测试MM卸载了我们的apk,然后...需要在访客模式下清理掉访客模式的应用和数据,再次安装apk,安装成功。 设置-->搜索-->访客模式 1.打开访客模式 2.清除房客数据,关闭访客模式 3.重新安装APK,成功 ...
  • Android 静默更新安装 apk

    千次阅读 2018-04-03 15:04:26
    Android 静默更新安装 apk 需要说明的是:一般的应用没有权限干这事,这里需要Root权限。... * 安装apk * * @param context * @param file */ public static void installFile(Context context, File file)...
  • Android开发:用adb命令安装apk到手机

    万次阅读 2019-05-13 16:16:16
    一、首先需要准备一个apk以及真机(我们以真机为...显示上图信息,说明连接成功,就可以推送安装apk了。 如果 出现下图,则可参照https://blog.csdn.net/y201314an/article/details/81022556进行修改环境变量 ...
  • Android Studio TV 安装APK

    千次阅读 2018-12-16 21:45:10
    我使用的Android Studio的版本是3.2 1. 使用Android Studio编译生成对应的apk文件。 在工具栏选择Build-&gt;Build Bundle(s)/APK(s)-&gt;...2. 手动安装APK。 2.1首先通过AVD Manager...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,697
精华内容 10,278
关键字:

安装apk