3

我有很多 apk 文件,我想用 robotsium 为它们编写简单的测试。当我试图为他们找到主要活动时,我遇到了一些问题,例如在 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 在我的 PC 中重新签名)我想了解,如何从 th apk 文件中识别 MainActivity?谢谢

4

6 回答 6

11

我知道这是旧的,但我碰巧遇到了它。

问题是:“我想了解,如何从 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>

命令参考:badging 打印在 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'

您要查找的是:“launchable-activity”

完毕!

我希望这可以帮助别人。

Ĵ

于 2014-11-03T17:29:52.163 回答
2

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

于 2013-03-19T16:21:09.373 回答
1

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

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

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

于 2013-04-16T12:07:20.287 回答
1

反编译apk文件。找到AndroidManifest.xml文件...打开文件并找到以包含意图过滤器的活动开头的第一行...此活动通常包含主要活动名称...在此代码中,主要活动名称是 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> 

于 2017-06-02T09:09:56.843 回答
0

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

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

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

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

于 2013-03-19T16:10:32.093 回答
0

为了节省时间(如果你想测试超过 100 个 apk),你必须自动化这个识别步骤。

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

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

于 2014-03-12T11:09:35.570 回答