Windows系统双击APK安装到手机,并启动应用

Windows系统双击APK安装到手机,并启动应用

前言

作为一个Android开发工程师,平时经常和apk文件打交道,之前见过通过bat文件双击安装的博客,最近我写了一些cmd代码后觉得只是安装的话还是简单了些,能不能安装后给我自动打开呢?

感觉用adb命令就能实现吧,adb install完成安装,adb am start完成启动,只要知道包名和启动activity就行,而这两个在AndroidManifest.xml里面都有,于是花了点时间试了下!

环境安装

这里需要用到adb和aapt,需要Android SDK,这里就默认装好了啊,应该很简单,也可以用Android Studio自带的,系统环境需要设置好,可以在cmd上检查下面两个命令能不能使用:

复制代码
adb 
aapt

如果aapt不能使用的话,需要在环境变量path中添加:

perl 复制代码
%ANDROID_HOME%\build-tools\29.0.3

这里29.0.3是我的build tool版本,可以看你SDK内有哪些,自己选一个版本。

下面我就默认环境配置正常了。

编写BAT代码

其实我也不太会BAT代码,基本全是靠GPT写的,下面看完整代码,注释写的很清楚就不解释了:

vbnet 复制代码
@echo off

REM 使用UTF-8
chcp 65001

REM 启用延迟变量扩展
setlocal enabledelayedexpansion

REM 设置自定义ADB和AAPT路径变量
set CUSTOM_ADB_PATH=
set CUSTOM_AAPT_PATH=

REM 获取APK文件路径
set "APK_PATH=%~1"

REM 检查自定义ADB和AAPT路径变量是否为空字符串,如果为空则使用默认路径
if "%CUSTOM_ADB_PATH%"=="" (
    set "ADB_PATH=adb"
) else (
    set "ADB_PATH=%CUSTOM_ADB_PATH%"
)
if "%CUSTOM_AAPT_PATH%"=="" (
    set "AAPT_PATH=aapt"
) else (
    set "AAPT_PATH=%CUSTOM_AAPT_PATH%"
)

REM 安装APK
%ADB_PATH% install -r "%APK_PATH%"

REM 等待安装完成
ping -n 5 127.0.0.1 > nul

REM 获取包名和启动的Activity
for /F "tokens=2 delims='='" %%a in ('%AAPT_PATH% dump badging "%APK_PATH%" ^| findstr /C:"package: name="') do (
    set "PACKAGE_NAME=%%~a"
    set "PACKAGE_NAME=!PACKAGE_NAME:'=!"
    echo 包名:!PACKAGE_NAME!
)
for /F "tokens=2 delims='='" %%a in ('%AAPT_PATH% dump badging "%APK_PATH%" ^| findstr /C:"launchable-activity: name="') do (
    set "LAUNCH_ACTIVITY=%%~a"
    set "LAUNCH_ACTIVITY=!LAUNCH_ACTIVITY:'=!"
    echo 启动的Activity:!LAUNCH_ACTIVITY!
)

REM 启动已安装的APK
%ADB_PATH% shell am start -n !PACKAGE_NAME!/!LAUNCH_ACTIVITY!

pause

把上面代码保存到一个文件,位置随便,命名为install.bat,就可使用了。

添加双击支持

双击支持很简单,可以随便找个apk文件,右键选择打开方式,然后选择始终使用此应用打开,从电脑上找到你的install.bat文件,点击确认就行了。

如果不想弄默认打开了,可以去控制面板改。

使用

经过签名几步,就可以双击打开APK文件了。不过这里有几个问题要注意下:

  1. 第一个当然就是要连接手机了
  2. 第二是需要手机开启USB调试功能,未开启的要去开发者选项中打开,并授权当前电脑,最好把安装限制权限什么的放一放。
  3. 有个很坑的问题就是,这里只支持一个device,手机或者模拟器多了会有问题。

部分原理解析

本来想混着写原理的,后面想想,大家看这文章是拿来用的,所以原理最后提一提就行了。

adb命令

这里也就两个adb命令,一个安装,一个启动应用:

yaml 复制代码
adb install -r xxx.apk
adb am start -n !PACKAGE_NAME!/!LAUNCH_ACTIVITY!

启动应用的时候,需要知道包名和启动activity就行了,后面字符串拼一下。

aapt获取apk信息

本来我都想提取AndroidManifest.xml里面的信息的,结果BAT不支持,GPT给了我一套python代码,后面发现aapt好像也很强大啊,这里可以自己了解下,或者输入下面命令,看下有哪些有用信息:

lua 复制代码
aapt dump badging app-debug.apk

遇到问题

中建这个BAT一直不行,后面问了好久,GPT才给出一个关键代码:

lua 复制代码
REM 启用延迟变量扩展
setlocal enabledelayedexpansion

这里设置了变量需要用到这个,不然获取不到,一开始我还以为是我aapt有问题。。。

小结

总而言之,这里就是写了个bat,通过adb安装apk,通过aapt解析apk去启动安装的应用,通过设置apk后缀名的默认打开应用实现双击功能!ok 挺实用的。

相关推荐
Cutecat_32 分钟前
视频字幕处理工具横向:提取模式 vs 编辑模式,该如何选择
android·前端·ios·语音识别
2601_961765292 小时前
【分享】PlayerPro媒体音乐播放器 完整专业版
android·媒体
JohnnyDeng944 小时前
【Android】Android 包体积优化:R8/ProGuard 深度配置全攻略
android·性能优化·kotlin·jetpack
故渊at4 小时前
第九板块:Android 多媒体体系 | 第二十四篇:Camera Service 与 HAL3 成像流水线
android·camera·多媒体体系·hal3
Jinkxs7 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
私人珍藏库8 小时前
【Android】VLLO-韩国热门手机剪辑APP
android·app·工具·软件·多功能
Cloud_Shy6188 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
AFinalStone9 小时前
Android12 U盘插拔链路源码全解析(五):Framework层(下) StorageManagerService
android·frameworks
林九生10 小时前
【实用技巧】MySQL 绿色版一键路径更新脚本详解 —— update_path.bat 深度解析
android·数据库·mysql
故渊at12 小时前
第十三板块:Android 综合架构与未来演进 | 第三十一篇:Android 架构演进与 Fuchsia OS 的挑战
android·架构·宏内核·微内核·fuchsia·ipc 性能博弈