2020-06-03补充 最优化版本

GitHub demo地址

apk下载地址

  1. 新建一个APP,

    • 使用Accessibility功能 监听vivo的 安装引用 界面
    • 用户输入 vivo密码,后续 自动填写用
  2. 安装应用弹出时
    1. 用Accessiblity功能 主动输入密码
    2. 模拟点击 安装、打开 按钮

----------- -----------下面的老方法可以不看了----------- -----------

2018/08/20 优化

不足

之前写的要复制到model的build.gradle内,如果你有4、5个项目,每次都得复制,很糟糕的解决方案

解决
  1. vivo安装单独写一个脚本vivo.gradle
  2. 放到工作空间下(我的是C://WorkSpace)
  3. 然后每个项目 只要在model的build.gradle中导入(apply from: ‘C:\WorkSpace\vivo.gradle’)即可

额外改动
给task加一个group:‘custom’ 就不需要去 gradle视图的 other分组找了

代码
File getNewestAPK1(File it, File newestCreateFile) {println "is called ${it.path} exists: ${it.exists()}"if (it.isDirectory()) {it.listFiles().each {newestCreateFile = getNewestAPK1(it, newestCreateFile)}} else {newestCreateFile = doGetNewestAPK(it, newestCreateFile)}newestCreateFile
}File doGetNewestAPK(File it, File newestCreateFile) {if (it.name.endsWith(".apk")) {if (newestCreateFile == null || !newestCreateFile.exists()) {newestCreateFile = itprintln "assign value"} else if (it.lastModified() > newestCreateFile.lastModified()) {newestCreateFile = itprintln "newestCreateFile is ${it.name}"}}newestCreateFile
}task installSdcard(group:'custom', dependsOn: ':app:assembleDebug') {File apkDir = file("build/outputs/apk")if (apkDir != null && apkDir.exists()) {apkDir.deleteDir()}doLast {File newestCreateFile = getNewestAPK1(apkDir, null)if (newestCreateFile == null) {println "Apk file not exist"return}println "APK file exit, path:${newestCreateFile.path}""adb shell mkdir /sdcard/apk"//"adb shell rm /sdcard/apk/app-debug.apk""adb push ${newestCreateFile.path} /sdcard/apk/app-debug.apk".execute().waitForProcessOutput()'adb shell am start -a "android.intent.action.VIEW" -d "file:///mnt/sdcard/apk/app-debug.apk" -t "application/vnd.android.package-archive"'.execute().waitForProcessOutput()println "install task finish"}
}

打包路径不是固定的,使用了productFlavors的会导致多一个目录,所以我才用的是model相对目录 build/outputs/apk 下的最新改动的APK。就解决了 APK名称、路径不一致的问题


Context

vivo、oppo,固然是出于安全考虑,安装应用要输密码。但实现安全的途径有很多,这种方式 对开发者非常不友好

方法:

  1. gradle中编写一个task
  2. 用adb命令将apk push到sdcard上
  3. 然后调用adb shell调起安装程序

在sdcard上安装apk不用输入密码

前期准备

  1. adb命令已经加入到path里

示例中的目录结构

Project/app(运行的model)
Project/app/build.gradle (在这增加task)

注意
需换成你自己的变量有:

  • apk名称

运行

AndroidStudio右侧—>Gradle projects栏---->项目model名称----》Tasks-----》other分组—》installSdcard这个task 双击运行

代码:

task installSdcard (dependsOn: ':app:assembleDebug') {def apkName = "app-debug.apk" //记得修改成你的APK名称,这个是默认的debug名称def apkoutput = file("build/outputs/apk/debug/${apkName}")def isApkExist = apkoutput.exists()if (isApkExist) {apkoutput.delete()}doLast{if (!apkoutput.exists()) {println "Apk file not exist, PATH:${apkoutput.path}"return}"adb shell mkdir /sdcard/apk""adb shell rm /sdcard/apk/app-debug.apk ""adb push ${apkoutput.path} /sdcard/apk/app-debug.apk".execute().waitForProcessOutput()'adb shell am start -a "android.intent.action.VIEW" -d "file:///mnt/sdcard/apk/app-debug.apk" -t "application/vnd.android.package-archive"'.execute().waitForProcessOutput()println "install task finish"}
}

安装APK 免输入vivo、oppo密码相关推荐

  1. 免输入用户名和密码以及git clone以后想提交代码

    git push的时候免输入用户名和密码: https://www.jianshu.com/p/6c61b13e8bdb --------------------------------------- ...

  2. Win10怎么设置安装软件需要输入管理员账号密码

    有一些用户不希望别人随便在电脑上安装软件,所以想要设置安装软件的时候需要输入管理员账户密码,如何进行设置呢?下面系统之家小编给大家带来了设置安装软件需要输入密码获取管理员权限的图文教程. 深度技术 G ...

  3. TortoiseGit 连接 git服务器免输入用户名和密码的方法

    每次git clone 和push 都要输入用户名和密码.虽然安全,但在本机上每次都输有些麻烦,如何记住用户名和密码呢? 在网上看了各种方法,比如改环境变量什么的都比较麻烦,还不一定成功,然后就找到了 ...

  4. android studio安装apk时,vivo 部分手机出现 解析软件包错误

    AndroidStudio运行apk时,vivo部分手机出现   解析软件包错误  提示,安装失败; 解决方法: Androidstudio  -->  File   --> Settin ...

  5. Composer 安装时要求输入授权用户名密码

    composer require "overtrue/laravel-socialite:~2.0"Authentication required (packagist.phpco ...

  6. Android-vivo x21 真机 adb 安装 apk文件需要输入密码

    有种绝望,叫不知道密码 当使用 adb 命令安装 APK 的时候,出现这个页面时,表示很惊讶,但是重点是,账号是IT同学设置的,我!并!不!知!道!密!码! vivo 的技术支持是这么解释的.对此我只 ...

  7. Mac下安装软件忘记管理员名称与密码

    在Mac下安装软件时,提示输入管理员名称与密码进行鉴定,有时候可能忘记密码,或者输入的密码不对,这个时候可以新建一个新的管理员账号来解决该问题. 新建管理员账号: 1.开机,启动时按住苹果键(键盘上有 ...

  8. Android开发:用adb命令安装apk到手机

    一.首先需要准备一个apk以及真机(我们以真机为例,就不说明模拟器了),然后adb devices查看手机是否连接, 直接输入 adb devices 即可,如图: 显示上图信息,说明连接成功,就可以 ...

  9. 【Android错误解决方案】解决AndroidStudio在oppo和vivo手机上安装apk失败----终极解决方案

    文章目录 [Android错误解决方案]解决AndroidStudio在oppo和vivo手机上安装apk失败---终极解决方案 问题描述 错误描述 解决方案一 解决方案二 总结 [Android错误 ...

最新文章

  1. RecyclerView 滑动显示返回按钮,点击返回到顶部
  2. Matlab:成功解决Function definition are not permitted at the prompt or scripts
  3. MySQL各部门求最值_mysql 求分组最大值的十个解法
  4. 全球及中国医用腋拐行业竞争格局及供需前景预测报告2021年版
  5. 实现AIDL接口的Binder连接池
  6. fragment嵌套,viewpager嵌套 不能正确显示
  7. android ndk 文件管理,Android NDK开发指南(二)Android.mk文件
  8. Qt之加减乘除四则运算-支持负数
  9. 容器、微服务和互联网架构浅谈
  10. 用虚拟机在一台电脑上实现xPC实时仿真
  11. aspectjweaver的作用
  12. 使用pdfobject.js实现在线浏览PDF
  13. 浅谈一下前后端分离(什么是前后端分离以及前后端分离的原理)
  14. java的reader_Java Reader类
  15. 手写Bundle Adjustment
  16. 计算机软硬件的开发及应用,管理和控制计算机系统软硬件资源的软件是 计算机软硬件开发...
  17. 微信清除自带浏览器的缓存
  18. 计算机画图讲课ppt,画图教学课件
  19. 安卓系统监控任务管理器App推荐
  20. java什么是this_java中的this是什么

热门文章

  1. 2020 最美最有意思辞职信
  2. 时间序列ARMA中p,q选择
  3. 操作系统基础知识用户态和内核态的区别
  4. java 日历工具_Java开发笔记(四十二)日历工具的常见应用
  5. carplay_如何更改您的CarPlay壁纸
  6. 飞入百姓家的智能路由器
  7. 科技人文丨爱上陌生人的36个问题
  8. 优化产品交互逻辑来提升产品性能
  9. voxelmorph中的STN网络
  10. 关于留言簿的补充说明