是否有任何命令可以让我使用该应用程序的文件cmd.exe
启动特定 android 应用程序的主要活动。.apk
请注意,我知道这个命令只安装一个 android 应用程序:
adb install myapp.apk
此命令只会安装myapp
到模拟器上,我必须从模拟器手动运行此应用程序(通过单击其图标)。
我想要做的是使用一个命令,它不仅安装应用程序而且启动它的主要活动(请注意,我只有它的.apk
文件,所以我不知道包名称或任何活动名称是什么)。
是否有任何命令可以让我使用该应用程序的文件cmd.exe
启动特定 android 应用程序的主要活动。.apk
请注意,我知道这个命令只安装一个 android 应用程序:
adb install myapp.apk
此命令只会安装myapp
到模拟器上,我必须从模拟器手动运行此应用程序(通过单击其图标)。
我想要做的是使用一个命令,它不仅安装应用程序而且启动它的主要活动(请注意,我只有它的.apk
文件,所以我不知道包名称或任何活动名称是什么)。
你不能一次性安装和运行——但你当然可以使用 adb 来启动你已经安装的应用程序。使用 adb shell am start 触发一个意图 - 不过,您需要为您的应用程序使用正确的意图。几个例子:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
将启动设置,并且
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity
将启动浏览器。如果要将浏览器指向特定页面,请执行此操作
adb shell am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://www.google.co.uk
如果您不知道 APK 中的活动名称,请执行此操作
aapt d xmltree <path to apk> AndroidManifest.xml
输出内容将包括这样的部分:
E: activity (line=32)
A: android:theme(0x01010000)=@0x7f080000
A: android:label(0x01010001)=@0x7f070000
A: android:name(0x01010003)="com.anonymous.MainWindow"
A: android:launchMode(0x0101001d)=(type 0x10)0x3
A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
A: android:configChanges(0x0101001f)=(type 0x11)0x80
E: intent-filter (line=33)
E: action (line=34)
A: android:name(0x01010003)="android.intent.action.MAIN"
XE: (line=34)
这会告诉您主要活动 (MainWindow) 的名称,您现在可以运行
adb shell am start -a android.intent.action.MAIN -n com.anonymous/.MainWindow
如果您正在寻找“adb run myapp.apk”的等价物
您可以使用此答案中显示的脚本
(仅限 linux 和 mac - 可能在 windows 上使用 cygwin)
linux/mac 用户还可以创建一个脚本来运行 apk,如下所示:
使用以下 3 行创建一个名为“adb-run.sh”的文件:
pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act
然后“chmod +x adb-run.sh”使其可执行。
现在您可以简单地:
adb-run.sh myapp.apk
这里的好处是您不需要知道包名称或可启动的活动名称。同样,您可以创建“adb-uninstall.sh myapp.apk”
注意:这要求您的路径中有 aapt。您可以在 SDK 的新构建工具文件夹下找到它
这是shell脚本中的解决方案:
apk="$apk_path"
adb install "$apk"
sleep 1
pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null
pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1
当您从 GUI 启动应用程序时,adb logcat
可能会向您显示相应的操作/类别/组件:
$ adb logcat
[...]
I/ActivityManager(1607): 开始 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.browser/.BrowserActivity } 从 pid 1792
[...]
我把它放在我的makefile中,就在下一行之后adb install ...
adb shell monkey -p `cat .identifier` -c android.intent.category.LAUNCHER 1
为此,必须有一个 .identifier 文件,其中包含应用程序的捆绑标识符,例如com.company.ourfirstapp
无需寻找活动名称。
首先安装您的应用程序:
adb install -r path\ProjectName.apk
-r 的优点是即使尚未安装它也能正常工作。
要启动 MainActivity,您可以像这样启动它:
adb shell am start -n com.other.ProjectName/.MainActivity
我创建了终端别名来使用单个命令安装和运行 apk。
// I use ZSH, here is what I added to my .zshrc file (config file)
// at ~/.zshrc
// If you use bash shell, append it to ~/.bashrc
# Have the adb accessible, by including it in the PATH
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:path/to/android_sdk/platform-tools/"
# Setup your Android SDK path in ANDROID_HOME variable
export ANDROID_HOME=~/sdks/android_sdk
# Setup aapt tool so it accessible using a single command
alias aapt="$ANDROID_HOME/build-tools/27.0.3/aapt"
# Install APK to device
# Use as: apkinstall app-debug.apk
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
# As an alternative to apkinstall, you can also do just ./gradlew installDebug
# Alias for building and installing the apk to connected device
# Run at the root of your project
# $ buildAndInstallApk
alias buildAndInstallApk='./gradlew assembleDebug && apkinstall ./app/build/outputs/apk/debug/app-debug.apk'
# Launch your debug apk on your connected device
# Execute at the root of your android project
# Usage: launchDebugApk
alias launchDebugApk="adb shell monkey -p `aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name' | cut -d \' -f 2` 1"
# ------------- Single command to build+install+launch apk------------#
# Execute at the root of your android project
# Use as: buildInstallLaunchDebugApk
alias buildInstallLaunchDebugApk="buildAndInstallApk && launchDebugApk"
注意:这里我正在构建、安装和启动调试 apk,它通常位于路径:
./app/build/outputs/apk/debug/app-debug.apk
,当从项目的根目录执行此命令时如果您想安装和运行任何其他 apk,只需将调试 apk 的路径替换为您自己的 apk 的路径
这是相同的要点。我创建了这个,因为我无法使用 Android Studio 构建大约 28 分钟,所以我切换到大约 3 分钟的终端构建。您可以在此处阅读有关此内容的更多信息
解释:
我认为需要解释的一个别名是launchDebugApk
别名。以下是它的分解方式:
该部分aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name
基本上使用该aapt
工具从apk中提取包名。
接下来是命令:adb shell monkey -p com.package.name 1
,它基本上使用该monkey
工具在连接的设备上打开已安装应用程序的默认启动器活动。的部分com.package.name
被我们之前的命令替换,该命令负责从 apk 获取包名称。