如何在apk文件中找到robotium测试的主要活动

时间:2013-03-19 11:02:58

标签: android testing automated-tests dropbox robotium

我有很多apk文件,我想为他们编写带有robotium的简单测试。当我尝试在Dropbox应用程序中找到主要活动时,我遇到了一些问题。 在AndroidManifest.xml中我发现了这个:

</activity> <provider android:name=".provider.ZipperedMediaProvider" android:exported="false" android:authorities="com.dropbox.android.ZipperedMediaProvider"></provider> <provider android:name=".provider.CameraUploadsProvider" android:exported="false" android:authorities="com.dropbox.android.CameraUploadsProvider"></provider> <activity android:theme="@android:01030055" android:name=".activity.DropboxBrowser"> <intent-filter > <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> <intent-filter android:label="Dropbox File Browser"> <action android:name="com.dropbox.BROWSE"></action> <action android:name="android.intent.action.VIEW"></action> <action android:name="android.intent.action.EDIT"></action> <category android:name="android.intent.category.DEFAULT"></category> <data android:mimeType="vnd.android.cursor.dir/vnd.dropbox.entry"></data> <data android:mimeType="vnd.android.cursor.item/vnd.dropbox.entry"></data> </intent-filter> </activity>

如何理解主要活动的调用方式?我正在使用ApkAnalyser,我尝试了不同的类名和其他字符串,但是机器人测试无法启动应用程序,并写道我的项目中没有测试:/(apk在我的电脑中重新签名)我想了解,如何从apk文件中识别MainActivity? thx

7 个答案:

答案 0 :(得分:10)

我知道这已经过时了,但我碰巧遇到了它。

问题是:“我想了解,如何识别apk文件中的MainActivity?”因为你应该在你的盒子上有SDK和Build文件。执行以下操作:

打开命令窗口/终端

cd <SDK PATH>/build-tools/<BUILD TOOLS #>/

MAC / LINUX

./aapt dump badging <path to the APK file>

aapt.exe dump badging <path to the APK file>

命令参考: 徽章打印APK中声明的应用的标签和图标。

Android资产包装工具(aapt)会获取您的应用程序资源文件,例如AndroidManifest.xml文件和您的活动的XML文件,并对其进行编译。

http://developer.android.com/tools/building/index.html

输出将如下:

./aapt dump badging  ~/Documents/Projects/Eclipse/AndroidAutomation/Application/Project-debug-0.9.0.65.apk 
package: name='com.company.mobile.debug' versionCode='1' versionName='0.9.0.65-QADrop' platformBuildVersionName=''
sdkVersion:'15'
targetSdkVersion:'19'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
application-label:'Company-QADrop'
application-icon-160:'res/drawable-hdpi-v4/ic_launcher.png'
application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png'
application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png'
application-icon-480:'res/drawable-xxhdpi-v4/ic_launcher.png'
application: label='Company-QADrop' icon='res/drawable-hdpi-v4/ic_launcher.png'
application-debuggable
launchable-activity: name='com.company.mobile.default'  label='' icon=''
feature-group: label=''
  uses-feature: name='android.hardware.screen.portrait'
  uses-implied-feature: name='android.hardware.screen.portrait' reason='one or more activities have specified a portrait orientation'
  uses-feature: name='android.hardware.touchscreen'
  uses-implied-feature: name='android.hardware.touchscreen' reason='default feature for all apps'
main
other-activities
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '160' '240' '320' '480'

您想要寻找的是:“可发布活动”

DONE!

我希望这有助于某人。

Ĵ

答案 1 :(得分:2)

在Android应用程序中总是有一个主要活动,但不仅可以启动此活动。在一个应用程序中,可能有几个活动,您可以单独启动。主要活动必须有android:name =&#34; android.intent.category.LAUNCHER。&#34;在您的示例中,唯一的主要活动是:.activity.DropboxBrowser 更多信息(尤其是启动模式):http://developer.android.com/guide/topics/manifest/activity-element.html

答案 2 :(得分:1)

此链接为我们提供了完美的方式

http://code.google.com/p/robotium/wiki/RobotiumForAPKFiles

在此期间,当您使用re-sign.jar文件重新签名apk时,它会告诉您apk文件的名称和活动。

答案 3 :(得分:1)

查看这个python代码,了解如何获取包/活动名称:

http://voyager.wordpress.com/

本网站提供了一个python脚本来分析“ aapt ”的输出。

答案 4 :(得分:1)

反编译apk文件。找到AndroidManifest.xml文件...打开文件并找到以包含intent-filter的活动开头的第一行....此活动包含主要活动名称normaly ...在此代码中主要活动名称是 MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lenovo.speech2sms">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS"/>


<application
    android:allowBackup="true"
    android:icon="@mipmap/app_icon_256"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Main2Activity"
        android:screenOrientation="portrait" />
    <activity
        android:name=".Main3Activity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".Main4Activity"
        android:screenOrientation="portrait">
    </activity>
</application> 

答案 5 :(得分:0)

主要活动在上面的XMl中定义,它将链接到main的意图过滤器。

在上述代码的情况下,它将包含在以下内容中:

告诉我活动是“.activity.DropboxBrowser”。

“。”在开头意味着您需要附加应用程序的包名称,因此它将类似于“xxx.xxx.activity.DropboxBrowser”,其中xxx.xxx是在android清单顶部定义的包名(或者您可以用pacakagemanager查找)

答案 6 :(得分:0)

要获得时间(如果你想测试100多个apk),你必须自动执行这个识别步骤。

为此,您可以解析Manifestfile并仅选择处理由android.intent.action.MAIN操作和android.intent.category.LAUNCHER类别组成的意图的Activity。  

解析的灵感:com.android.ide.common.xml.AndroidManifestParser