如何使用.apk文件运行(不仅安装)Android应用程序?

Aze*_*eem 53 android android-install-apk

是否有任何命令cmd.exe允许我使用该应用程序的.apk文件启动特定Android应用程序的主要活动.请注意,我知道这个命令只安装一个Android应用程序:

adb install myapp.apk
Run Code Online (Sandbox Code Playgroud)

此命令仅安装myapp到模拟器上,我必须从模拟器手动运行此应用程序(通过单击其图标).

我想要做的是使用一个命令,它不仅安装应用程序,而且还启动它的主要活动(请注意我只有它的.apk文件所以我不知道包名称或任何活动名称是什么).

Air*_*Ltd 81

您不能一次安装和运行 - 但您当然可以使用adb来启动已安装的应用程序.使用adb shell开始激活一个意图 - 你需要为你的应用程序使用正确的意图.几个例子:

adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings 
Run Code Online (Sandbox Code Playgroud)

将启动设置,和

adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity 
Run Code Online (Sandbox Code Playgroud)

将启动浏览器.如果要将浏览器指向特定页面,请执行此操作

adb shell am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://www.google.co.uk
Run Code Online (Sandbox Code Playgroud)

如果您不知道APK中活动的名称,请执行此操作

aapt d xmltree <path to apk> AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)

输出内容将包括这样的部分:

   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)
Run Code Online (Sandbox Code Playgroud)

这告诉你主要活动的名称(MainWindow),现在你可以运行了

adb shell am start -a android.intent.action.MAIN -n com.anonymous/.MainWindow
Run Code Online (Sandbox Code Playgroud)


dlj*_*ava 12

如果你正在寻找相当于"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
Run Code Online (Sandbox Code Playgroud)

然后"chmod + x adb-run.sh"使其可执行.

现在你可以简单地说:

adb-run.sh myapp.apk

这样做的好处是您不需要知道包名称或可启动活动名称.同样,您可以创建"adb-uninstall.sh myapp.apk"

注意:这要求您遵循自己的道路.您可以在SDK中的新构建工具文件夹下找到它


小智 6

从GUI启动应用程序时,adb logcat可能会显示相应的操作/类别/组件:

$ adb logcat
[...]
I/ActivityManager(1607):START {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.android.browser/.BrowserActivity来自pid 1792
[...]


Ver*_*ass 5

这是shell脚本中的解决方案:

apk="$apk_path"
Run Code Online (Sandbox Code Playgroud)

1.安装APK

adb install "$apk"
sleep 1
Run Code Online (Sandbox Code Playgroud)

2.获取程序包名称

pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null
Run Code Online (Sandbox Code Playgroud)

3.启动应用

pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1
Run Code Online (Sandbox Code Playgroud)


小智 5

首先安装您的应用程序:

\n\n
adb install -r path\\ProjectName.apk\n
Run Code Online (Sandbox Code Playgroud)\n\n

-r 的伟大之处在于,即使尚未安装 \xe2\x80\x99,它也能工作。

\n\n

要启动 MainActivity,您可以像这样启动它:

\n\n

adb shell am start -n com.other.ProjectName/.MainActivity

\n