安装APK 免输入vivo、oppo密码

2023-05-16

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 = it
            println "assign value"
        } else if (it.lastModified() > newestCreateFile.lastModified()) {
            newestCreateFile = it
            println "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"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装APK 免输入vivo、oppo密码 的相关文章

  • 将UIColor转换为RGB值

    objc view plain copy 将UIColor转换为RGB值 NSMutableArray changeUIColorToRGB UIColor color NSMutableArray RGBStrValueArr 61 NS
  • 业余时间你在做什么,你就会变成什么样的人?

    改变 xff0c 从业余时间开始 博客定位 xff1a 技术 43 思考 其余统统不要 2017 xff0c 我来了 xff01
  • Xcode9 无证书真机调试

    写在前面 公司分配了新的测试机 证书99台名额已满 所以上网找教程 学习了一下如何使用Xcode无证书进行真机调试 一 创建证书 1 运行Xcode xff0c Xcode Preference 添加账号 xff08 能在appstore下
  • HTML知识点

    这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右SmartyP
  • SpringCloud:seata 服务端启动以及介绍(1)

    SpringCloud xff1a seata 服务端启动以及介绍 文章目录 SpringCloud xff1a seata 服务端启动以及介绍关联文章1 seata是什么1 1 四种事务模式1 2 三种角色 2 启动seata 服务端 x
  • 简单审批流程表设计

    审批配置表 xff08 approval config xff09 字段名称 类型 长度 约束 备注 code varchar 64 not null 审批流程code type tinyint 1 not null 审批方式 xff1a
  • 学习笔记—— unreferenced local variable

    file c xff08 xff09 warning C 39 xxx 39 unreferenced local variable 变量XXX定义了 但是在程序中没有使用到 发出的一则警告 目前来看 xff0c 不影响程序的运行
  • STM32定时器配置为编码器模式(转)

    文章目录 一 编码器原理 二 为什么要用编码器 三 STM32编码器配置相关 四 STM32实战代码 五 一些注意 参考 一 编码器原理 如果两个信号相位差为90度 xff0c 则这两个信号称为正交 由于两个信号相差90度 xff0c 因此
  • java实现倒计时

    package timer import java util Calendar import java util Date import java util Timer import java util TimerTask java演示倒计
  • linux终端字符串转字符画

    概述 xff1a 将字符串 xff08 非图像 xff09 转换成字符画 xff0c 效果如图 xff1a lt
  • fastboot -- 如何刷系统中各个img文件

    Android系统adb刷机 作者 xff1a 郑鹤翔 在android的各个可用软件中 xff0c adb fastboot是最常用的一种 xff0c 作为开发人员 xff0c 我们需要经常的进行内核 xff0c 系统代码等的修改 xff
  • AndroidStudio Kotlin项目搭建

    简介 xff1a 本文主要先大概介绍一下怎么在as上搭建kotlin项目 xff0c 然后主要具体介绍kotlin的语法 安装kotlin plugin 在AS 3 0及以后的版本是自带Kotlin plugin的 xff0c 但是如果你现
  • Mariadb安装之后的各种设置

    1 启动MariaDB 安装完成MariaDB xff0c 首先启动MariaDB xff0c 两条命令都可以 systemctl start mariadb 或者 service mariadb start 设置开机启动 systemct
  • python读取文件失败解决方案

    python读取文件失败解决方法 我的目录如下 python text files pi digits txt python text files file reader py 1 python默认读取当前根目录 注意 Linux 目录间用
  • from matplotlib.cbook import is_string_like, el ImportError: cannot import name 'is_string_like'

    Traceback most recent call last File 34 321 py 34 line 2 in lt module gt import matplotlib pyplot as pt File 34 C Progra
  • STM32F4XX 采集编码器的溢出处理

    STM32F4XX定时器16位 xff0c 采集编码器时候会在0xFFFF溢出 xff08 假设配置period 61 0xFFFF xff09 假设不溢出的情况下1ms之内编码器变化的最大范围小于0x7FFF xff0c 则关于溢出则可以
  • dependencyManagement和dependencies的区别

    dependencyManagement和dependencies的区别 参考 xff1a http zhaoshijie iteye com blog 2094478 pom xml中build标签 cpf2016的博客 CSDN博客 还
  • VScode播放网易云音乐(详细讲解)

    步骤 安装插件 xff1a VSC Netease Music 按shift 43 ctrl 43 p xff0c 输入 nete 出现下图 在按shift 43 ctrl 43 p xff0c 输入 nete 即可选择播放音乐 xff08
  • 安装和配置openssl

    Steps to download compile and install are as follows Note Replace 0 9 8e with your version number Downloading OpenSSL Ru
  • 自定义异常的使用

    下面是定义一个自定义异常的例子 xff0c 开发中可以以此作为参考 xff0c 根据项目需求编写自己的异常类 package com thinkgem wlw modules job service 自定义异常要继承 Exception 类

随机推荐

  • Ant中的classpath配置和使用

    Ant手册中配置classpath采用classpath标签 xff0c 可是我发现这样配置总是不好用 xff0c 还是直接用path设置classpath 一 xff09 设置classpath的方法 lt path id 61 34 p
  • 在运行jar包中正确读取资源文件

    可能有不少初学者会有这样的困惑 xff1a 在你的代码里调用了一些资源文件 xff0c 如图片 xff0c 音乐等 xff0c 在调试环境或单独运行的时候可以正常显示或播放 xff0c 而一旦打包到jar文件中 xff0c 这些东东就再也出
  • Ant发布war包时,任务卡住不动也不报错

    使用ant给项目发布环境时 xff0c 任务卡住不动也不报错 xff0c 在网上查询了些资料 xff0c 估计是ant执行任务时虚拟机内存不够用 针对这个问题 xff0c 可以通过以下两种方法解决 xff1a 1 xff09 在javac节
  • Oracle函数:sys_connect_by_path

    Oracle函数 sys connect by path 主要用于树查询 层次查询 以及 多列转行 其语法一般为 xff1a select sys connect by path column name 39 connect symbol
  • JVM(Java虚拟机)中进程工作目录讲解

    每次我们用Java命令运行我们的Java程序 xff0c 都会在JVM中开启一个进程 xff0c 对于每一个进程 xff0c 都会有一个相对应的工作目录 xff0c 这个工作目录在虚拟机初始化的时候就已经设置好了 xff0c 默认的情况下
  • Java调用外部程序命令时线程阻塞问题分析

    文章参考 http www qqread com java 2010 05 w493489 html 今天要写个远程重启服务的功能 xff0c 为了开发速度 xff0c 暂时定为Java代码 43 WMIC命令的方法 xff0c 简单的说
  • 打造一台“苹果范儿”的 Linux 系统,桌面美化攻略来了~

    点击关注公众号 xff0c 实用技术文章及时了解 目录 前言参考文章1 安装工具gnome tweaks2 修改窗口的按钮位置3 安装gnome扩展并设置4 美化桌面主题5 美化图标6 美化光标7 美化桌面背景 xff0c 锁屏和登陆页面8
  • Android中的onConfigurationChanged方法没有被调用的原因

    在 Android中的onConfigurationChanged方法没有被调用的原因有很多 而刚入门是经常犯的两个错误直接导致onConfigurationChanged方法没有被调用 下面看看程序 package cn com impo
  • 31岁转行的我

    2011年从一所普通二本师范大学毕业后先后从事了两年的教育工作 xff0c 但都没有挣到钱 xff0c 12年从深圳回到西安 xff0c 参加了几次公务员和事业单位的招考 xff0c 几次因0 1分的微小差距与国家饭碗擦肩而过 后来决定不再
  • 吴军老师《给中学生/大学生的书单》----Yohao整理

    2018 7 27记录 span class hljs code 给中学生的书单 span 一 文学类 18本 span class hljs code 1 金庸和琼瑶各一本 长篇的比短篇的好 span span class hljs co
  • javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)

    可以参考 官方文档 xff1a https open doc dingtalk com docs doc htm spm 61 a219a 7629140 0 0 karFPe amp treeId 61 257 amp articleId
  • HDFS命令

    HDFS命令 1 hdfs基本操作 HDFS命令有两种风格 xff1a hadoop fs开头的 hdfs dfs开头的 两种命令均可使用 xff0c 效果相同 1 1 常用命令 如何查看hdfs或hadoop子命令的帮助信息 xff0c
  • 【Http2特性——Binary framing layer--push---HPACK】

    google文档 Http2 http2 引入了不兼容的new binary framing layer 所以大版本号增加了除非使用tcp socket xff0c 否则看不出http的版本区别 指Http向上层暴露的API接口一致 xff
  • 【《架构整洁之道》 读书笔记1----从部署的角度看依赖翻转】

    前言 看 架构整洁之道 之前 xff0c 依赖翻转理解 xff1a 依赖于抽象 xff0c 而不是依赖于实现 抽象 xff1a 比如水果店Apple Banana xff0c 抽象个水果接口 IFruit xff0c 用 IFruit 接口
  • 【架构 Flutter实践 Clean架构 && TDD测试驱动开发---1.0】

    2022 11 12 补充 最近在开发中尝试用了clean架构 xff0c 感觉就是 麻烦 太多模板代码 xff0c 很容易过度开发 我认为了解这些理念是很重要的 xff0c 但应该跟随你的项目 流程 进行调整 裁剪 如果你们的流程是 服务
  • Flutter didUpdateWidget 的使用问题 ( 为什么不建议重写)

    简单总结 以我的认知 xff1a 不要重写 didUpdateWidget你需要重写 xff0c 是否是你设计有问题你确定要重写 xff0c 且设计没问题 评论下大佬 xff0c 我也学下这种case 总结 xff1a 不要依赖于 didU
  • java ClassLoader机制和如何加载外部class文件(含代码)

    Java类的生命周期 生命周期有 xff1a 加载 xff08 Loading xff09 验证 xff08 Verification xff09 准备 xff08 Preparation xff09 解析 xff08 Resolution
  • Android Studio开发Groovy

    Context xff1a 主要讲下Android Studio如何开发Groovy xff0c 搭环境这东西 xff0c 最恶心 我查了N多的外文 1 AS Android Studio 本身是支持Groovy的 xff0c Gradle
  • RXJava找不到AndroidSchedulers

    原因 xff1a 还需要依赖一个 RxAndroid xff0c RxAndroid里有AndroidSchedulers xff0c RxJava里是没有的 xff08 类似于Java的SDK不会包含 AndroidSDK里的TextVi
  • 安装APK 免输入vivo、oppo密码

    2020 06 03补充 最优化版本 GitHub demo地址 apk下载地址 新建一个APP xff0c 使用Accessibility功能 监听vivo的 安装引用 界面用户输入 vivo密码 xff0c 后续 自动填写用 安装应用弹