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

时间:2011-05-24 10:46:20

标签: android android-install-apk

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

adb install myapp.apk

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

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

7 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:12)

如果你正在寻找相当于“adb run myapp.apk”

的话

您可以使用此answer

中显示的脚本

(仅限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”

注意:这要求您遵循自己的道路。您可以在SDK

中的新构建工具文件夹下找到它

答案 2 :(得分:6)

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

  

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

答案 3 :(得分:4)

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

apk="$apk_path"

1。安装apk

adb install "$apk"
sleep 1

2。获取包名称

pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null

3。启动应用

pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1

答案 4 :(得分:2)

我把它放在我的makefile中,在adb install ...

之后的下一行
adb shell monkey -p `cat .identifier` -c android.intent.category.LAUNCHER 1

为此,必须有一个带有应用程序包标识符的.identifier文件,例如com.company.ourfirstapp

无需寻找活动名称。

答案 5 :(得分:0)

我使用单个命令创建了终端别名来安装和运行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的路径

以下是gist。 我创建这个是因为我在使用Android Studio构建时遇到了大约28分钟的问题,因此我切换到大约3分钟的终端版本。您可以阅读有关此here

的更多信息

<强>解释

我认为需要解释的一个别名是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获取包名称。

答案 6 :(得分:0)

首先安装您的应用程序:

adb install -r path\ProjectName.apk

-r的妙处在于,即使尚未安装,它也可以正常工作。

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

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