我有很多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
答案 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)
答案 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