在eclipse下单击一下,在多个设备上安装并运行应用程序

时间:2011-05-30 16:51:35

标签: android eclipse adb

我想知道是否有办法在Eclipse下单击一下,在多个设备/模拟器上安装和运行Android应用程序。

当我在多个(n)设备上测试布局时,我现在正在进行n次运行(实际上是ctrl-F11快捷方式),选择正确的设备然后检查每个设备上的布局。

使用单个命令在连接到我的计算机的所有设备上安装和启动会很棒。

是否存在这样的事情?

5 个答案:

答案 0 :(得分:47)

如果您使用eclipse,请执行以下操作:

  1. 打开'项目属性'对话框。
  2. 在“运行/调试设置”下,选择您的项目并进行编辑。
  3. 应弹出另一个对话框,选择“目标”标签,选择“在所有兼容的devics / AVD上启动”。

  4. 应用,您应该在运行/调试时安装所有设备。

答案 1 :(得分:10)

最简单的方法是使用包含多行的批处理文件(或shell脚本)

adb -s SERIAL_NO install workspace/YOUR_PROJECT/bin/YOUR_APK.apk

确保将Eclipse设置为自动构建项目。然后,它不是一键,而是关闭:

  • Ctl-Shift-S保存全部,
  • Alt-TAB转到命令提示符
  • 向上箭头输入以重新运行脚本。
  • 享受。 5秒钟;)

答案 2 :(得分:5)

我刚完成脚本Aleadam建议我这样做。

通过安装和启动连接到计算机的每台设备上的简单循环。

脚本和安装:

#!/bin/bash

if [ $# -lt 3 ] ;then
    echo "usage $0 pathToTheFileToInstall packagename fullPackageActivityName"
    exit 1
fi

FILEPATH=$1
PACKAGE=$2
ACTIVITYNAME=$3

APK=`ls $FILEPATH/*.apk`

installOnSingleDevice(){
    echo "Installing on $DEVICE -------"
    echo "adb -s $1 install -r $APK"
    adb -s $1 install -r $APK 

    echo "adb -s $1 shell am start -n $2/$3"
    adb -s $1 shell am start -n $2/$3
    echo "--------------------------"
}

if [ $? -eq 0 ] ;then
    adb devices | grep device | grep -v attached | cut -f 1 > tmpfile
    while read line; 
    do 
        installOnSingleDevice $line $PACKAGE $ACTIVITYNAME&
    done < tmpfile
    rm tmpfile
else
    echo "No apk at this path (${FILEPATH})"
fi

用法示例:

andinstall ~/workspace/myapp/bin/ fr.openium.myapp fr.openium.myapp.activity.ActivitySplash

答案 3 :(得分:1)

您应该能够将Ant XML文件添加到Eclipse项目中,并使用可以从命令行运行外部程序的Ant任务填充它。可能您应该为要运行的每个设备分别设置一个任务项,然后是包含所有设备的父任务。

然后向Eclipse项目添加一个自定义构建器步骤,选择Ant作为构建器并指向您之前添加的XML文件(请参阅here

我不是Ant的大专家,但是在某些时候我需要添加一个自定义任务来从Eclipse中的项目代码中构建一个Jar,这样我就可以在每次需要时运行它(比如{ {3}})。这个程序运作得很好。

应该为您执行的Ant任务是Exec:here。您可能希望查看http://ant.apache.org/manual/Tasks/exec.html的简单启动器。

您的XML可能类似于以下内容(我还没试过):

<?xml version="1.0"?>
<project name="...use same name as your project for simplicity..." default="runmultidevices">
  <property name="myapk" location="workspace/YOUR_PROJECT/bin/YOUR_APK.apk"/>
  <target name="runmultidevices" description="Run on multiple devices" depends="rundevice1 rundevice2">
  </target>
  <target name="rundevice1" description="Run on device 1">
    <exec executable="adb">
      <arg line="-s SERIAL_NO_1 install ${myapk}" />
    </exec>
  </target>
  <target name="rundevice2" description="Run on device 2">
    <exec executable="adb">
      <arg line="-s SERIAL_NO_2 install ${myapk}" />
    </exec>
  </target>
</project>

为了不为每个项目手动编写包位置,Eclipse和Ant之间似乎没有这么好的集成。您可以尝试以下建议:

  • 使用http://ant.apache.org/manual/using.html
  • 中的原生Ant ${basedir}属性
  • here中调用Ant时将Eclipse变量作为附加参数传递:-Dworkspace_loc=${workspace_loc}
  • 使用特定的XML解析工具从Ant中访问Eclipse .project文件,如here

答案 4 :(得分:1)

这是我的解决方案,可以在多个设备上轻松构建,安装和启动Android应用程序,只有两个快捷方式 STRG + S STRG + ALT + F10 ;)< / p>

<强> 1。建立APK

Eclipse Build中的Android Build的正常行为是,不会创建APK。但在偏好中是禁用该行为的选项。

  • 窗口 - &gt;偏好 - &gt; Android - &gt;构建 - &gt;在出口或发布之前,请跳过包装和dexing

=&GT;取消选择该选项后,在更改代码后,只需要 Strg + S 即可创建APK文件。

<强> 2。安装并启动

要为多个设备安装并自动启动应用程序,最简单的方法是在我看来使用命令行和Windows Batch脚本:

<!-- language: Batch script -->
:: This five lines are used to minimize the 
:: command lines directly after the start
if not "%minimized%"=="" goto :minimized
set minimized=true
start /min cmd /C "%~dpnx0"
goto :EOF
:minimized

:: Path to the ADB and to the APK file
@set ADB="D:/Android/sdk/platform-tools/adb.exe"
@set APK="D:/workspace_android/SomeApp/bin/SomeApp.apk"

:: AndroidManifest.xml: <manifest package="com.example.appname">
:: The launching activity: <activity android:name=".activities.HomeActivity">
@set ACTIVITY=at.example.appname/.activities.HomeActivity

:: Install APK on all devices
%ADB% devices | tail -n +2 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
:: Launch App on all devices
%ADB% devices | tail -n +2 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%

在我的情况下,我有三个设备。为了更快地访问一个设备,我在上面的代码中使用了以下代码而不是循环。首先,我在最快的设备上安装并启动应用程序,然后在第二个设备上启动应用程序,依此类推。我相信有更好的方法,而不是使用tail,head和xargs,但我不太了解Batch文件,但它只是运行。 ;)

<!-- language: Batch script -->
:: NEXUS 5
:: This command reinstalls the APK on the Nexus 5 device
%ADB% devices | tail -n +2 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X install -r     %APK%
:: This command launch the application on the Nexus 5 device
%ADB% devices | tail -n +2 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%

:: Galaxy Tab
%ADB% devices | tail -n -2 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
%ADB% devices | tail -n -2 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%

:: Optimus 3D
%ADB% devices | tail -n +3 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
%ADB% devices | tail -n +3 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%

拥有Windows批处理脚本后,创建该文件的快捷方式。右键单击快捷方式文件,然后选择属性。在那里,您可以指定全局快捷键,例如 STRG + ALT + F10

在Eclipse中更改某些代码后,您只需按 STRG + S ,然后按 STRG + ALT + F10 ,最终将在所有设备上启动该应用。是啊! :)