Windows系统双击APK装置到手机,并发动运用

前语

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

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

环境装置

这儿需求用到adb和aapt,需求Android SDK,这儿就默认装好了啊,应该很简单,也能够用Android Studio自带的,系统环境需求设置好,能够在cmd上查看下面两个指令能不能运用:

adb
aapt

假如aapt不能运用的话,需求在环境变量path中添加:

%ANDROID_HOME%\build-tools\29.0.3

这儿29.0.3是我的build tool版别,能够看你SDK内有哪些,自己选一个版别。

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

编写BAT代码

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

@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文件,点击确认就行了。

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

假如不想弄默认翻开了,能够去控制面板改。

运用

经过前面几步,就能够双击翻开APK文件了。不过这儿有几个问题要注意下:

  1. 第一个当然便是要连接手机了
  2. 第二是需求手机敞开USB调试功用,未敞开的要去开发者选项中翻开,并授权当时电脑,最好把装置约束权限什么的放一放。
  3. 有个很坑的问题便是,这儿只支撑一个device,手机或者模拟器多了会有问题。

部分原理解析

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

adb指令

这儿也就两个adb指令,一个装置,一个发动运用:

adb install -r xxx.apk
adb am start -n !PACKAGE_NAME!/!LAUNCH_ACTIVITY!

发动运用的时分,需求知道包名和发动activity就行了,后边字符串拼一下。

aapt获取apk信息

本来我都想提取AndroidManifest.xml里边的信息的,结果BAT不支撑,GPT给了我一套python代码,后边发现aapt如同也很强壮啊,这儿能够自己了解下,或者输入下面指令,看下有哪些有用信息:

aapt dump badging app-debug.apk

遇到问题

中间这个BAT一向不行,后边问了良久,GPT才给出一个关键代码:

REM 启用延迟变量扩展
setlocal enabledelayedexpansion

这儿设置了变量需求用到这个,否则获取不到,一开始我还以为是我aapt有问题。。。

小结

总而言之,这儿便是写了个bat,经过adb装置apk,经过aapt解析apk去发动装置的运用,经过设置apk后缀名的默认翻开运用实现双击功用!ok 挺实用的。