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 挺实用的。

相关推荐
Devil枫32 分钟前
Kotlin高级特性深度解析
android·开发语言·kotlin
ChinaDragonDreamer34 分钟前
Kotlin:2.1.20 的新特性
android·开发语言·kotlin
雨白11 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹13 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空14 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭15 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日16 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安16 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑16 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟20 小时前
CTF Web的数组巧用
android