3

我正在使用 Android Studio,并尝试将 MonkeyTalk 代理与 Ant 集成到 APK 中。

基本上我遵循了以下步骤:

1.下载MonkeyTalk 2.0.1 Pro Beta

2.在桌面上创建一个新的空文件夹,标题为“example”或任何你喜欢的

3.将monkeytalkpro/agents/android/monkeytalk-agent-2.0.1.jar复制到“example”目录下

4.将monkeytalkpro/ant/monkeytalkpro-ant-2.0.1.beta.jar复制到“example”目录

5.将您的apk文件复制到“example”目录(本例中命名为myapp.apk)

6. 在“example”目录中创建一个名为 build.xml 的新文件,并填写以下内容:

<target name="instru">
    <mt:instrument
        srcfile="myapp.apk"
        destfile="myapp-post-instrumented.apk"
        agent="monkeytalk-agent-2.0.1.jar"
        androidsdk="/path/to/your/sdk"
        androidtarget="android-21"
        log="log.txt"
        verbose="true" />
    </target>

7.打开终端并 cd 进入您的“示例”目录

8.发布命令ant instru -lib monkeytalkpro-ant-2.0.1.beta.jar

9.该命令应该运行,然后在您的“示例”目录中生成一个与monkeytalk兼容的apk,标题为“myapp-post-instrumented.apk”</p>

警告:似乎存在一个错误,检测过程还将在您的“示例”目录中放置另一个名为“myapp-instrumented.apk”的文件,但该文件将为空。因此,请确保您的目标文件在您的 build.xml 文件中没有标题为“myapp-instrumented.apk”,否则这个空文件将覆盖您的 monkeytalk 兼容文件。

资料来源:http ://w3facility.org/question/android-studio-and-monkeytalk/#answer-23016422

我已经完成的步骤与原始步骤有两个不同之处:

  1. MonkeyTalk代理和ant jar的实际版本是2.0.10,不是2.0.1

  2. 使用编译工具 21.1.2,monkeytalkpro-ant-2.0.10.beta.jar 中集成的 APKTool 无法提取文件。所以,我更新了 APKTool 并生成了一个新的 jar。你可以在这里找到它: https ://www.dropbox.com/s/qsjaz5g15hy9i7k/monkeytalkpro-ant-2.0.10.beta.mod.jar?dl=0

但是如果有了这个修复,ant 将无法“检测”APK。Ant 无法对文件进行 dex 处理。

任何帮助和建议表示赞赏。

Pd1:我尝试使用来自uphyca(v0.9.7)的aspectj的gradle android插件编译Android studio,但它不起作用。它编译了项目,但是当我尝试启动它时它崩溃了。

Pd2:这里有一些日志:

-预编译:

-编译:

-编译后:

- 混淆:

weaved-0d60e12eb7c45a42662ee42c5398a922.jar [dx] [dx] 模拟例外:[dx] 本地 0005:无效 [dx] [dx] ...在字节码偏移量 0000000b [dx] 本地 [0000]:Landroid/support/v7/widget /动作菜单视图;[dx] 本地 [0001]: Landroid/view/ViewGroup$LayoutParams; [dx] locals[0002]: [dx] locals[0003]: [dx] locals[0004]: [dx] locals[0005]: [dx] ...同时处理块 000b [dx] ...同时处理方法 generateLayoutParams:(Landroid/view/ViewGroup$LayoutParams;)Landroid/support/v7/widget/ActionMenuView$LayoutParams; [dx] ...同时处理 generateLayoutParams (Landroid/view/ViewGroup$LayoutParams;)Landroid/support/v7/widget/ActionMenuView$LayoutParams; [dx] ... 在处理 android/support/v7/widget/ActionMenuView.class [dx] [dx] 1 错误时;中止

BUILD FAILED /private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1/app-debug/build_master.xml:892: The following error occurred while executing this line: /private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1 /app-debug/build_master.xml:894:执行此行时出现以下错误:/private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1/app-debug/build_master.xml:906:出现以下错误时执行此行:/private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1/app-debug/build_master.xml:283:返回空值:1

总时间:14 秒:错误:进程因错误退出:1(退出值:1)

检测的 APK 文件未在以下位置创建:/private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1/app-debug/bin/app-debug-debug.apk

检测 apk '/Users/monkeyTalk/app-debug.apk' 时出错:检测的 APK 文件未在以下位置创建:/private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1/app-debug/bin/app-debug-debug .apk

com.gorillalogic.monkeytalk.instrumentor.android.AndroidInstrumentor$InstrumentationException:检测的 APK 文件未在以下位置创建:/private/var/folders/fb/xhjph6n17sl_tnc7gfs_0ny80000gp/T/tmp_AndroidInstrumentor1423638478563_1/app-debug/bin/app-debug-debug.apk在 com.gorillalogic.monkeytalk.instrumentor.android.AndroidInstrumentor.copyInstrumentedApk(AndroidInstrumentor.java:244) 在 com.gorillalogic.monkeytalk.instrumentor.android.AndroidInstrumentor.beginInstrumentation(AndroidInstrumentor.java:173) 在 com.gorillalogic.monkeytalk.instrumentor .android.AndroidInstrumentor.instrumentApk(AndroidInstrumentor.java:130) 在 com.gorillalogic.monkeytalk.ant.InstrumentTask.execute(InstrumentTask.java:62) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291 ) 在 sun.reflect.NativeMethodAccessorImpl。在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:43) 的 invoke0(Native Method) 606) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant .Target.execute(Target.java:390) 在 org.apache.tools.ant.Target.performTasks(Target.java:411) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 在org.apache.tools.ant.Project.executeTarget(Project.java:1368) 在 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在 org.apache.tools.ant.Project。在 org.apache.tools 执行目标(Project.java:1251)。ant.Main.runBuild(Main.java:809) at org.apache.tools.ant.Main.startAnt(Main.java:217) at org.apache.tools.ant.launch.Launcher.run(Launcher.java: 280)在 org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

这是完整的日志: https ://www.dropbox.com/s/y3mo9ifgalpzf29/log.txt?dl=0

更新

这是 build.gradle 文件的内容。

apply plugin: 'com.android.application'
apply plugin: 'robolectric'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.jiahaoliuliu.monkeytalk"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 52
        versionName "1.9999"

        multiDexEnabled true
        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        monkeytalk.initWith(buildTypes.debug)
        monkeytalk {
            applicationIdSuffix ".monkey"
        }
    }

    sourceSets {
        androidTest {
            setRoot('src/test')
        }
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        compile 'com.android.support:appcompat-v7:21.+'
        compile 'com.github.chrisbanes.photoview:library:1.2.3'
        compile 'com.etsy.android.grid:library:1.0.5'
        compile 'com.facebook.android:facebook-android-sdk:3.21.1'
        compile 'com.google.android.gms:play-services-base:6.5.+'
        compile 'com.google.android.gms:play-services-wallet:6.5.+'
        compile 'com.google.android.gms:play-services-ads:6.5.+'
        compile 'com.google.android.gms:play-services-maps:6.5.+'
        compile 'com.google.android.gms:play-services-drive:6.5.+'
        compile 'com.google.android.gms:play-services-appindexing:6.5.+'
        compile 'com.google.android.gms:play-services-location:6.5.+'
        compile 'com.google.android.gms:play-services-identity:6.5.+'
        compile 'com.google.android.gms:play-services-plus:6.5.+'
        compile 'com.android.support:multidex:1.0.0'
        compile project(':Adjust')
        compile project(':aFileChooser-cbccac1d1cb74a6d57d25c5ded61e4bf4fc40c91')
        compile 'com.parse.bolts:bolts-android:1.+'
        compile 'com.android.support:recyclerview-v7:+'

        androidTestCompile 'org.robolectric:robolectric:2.4'
        androidTestCompile('junit:junit:4.12')
        androidTestCompile('org.mockito:mockito-core:1.10.19')
    }
}


robolectric {
    include '**/*Test.class'
}
4

1 回答 1

2

我遇到了同样的问题,但现在我可以检测 apk。您应该在调试模式下拥有 apk。不要在你的 android studio 中添加任何 monkeytalk 库依赖项。在 app/AndroidManifest.xml 中添加 GET_TASKS 权限。在版本 21 中,此 api 已贬值,因此您需要设置较低的 targetsdkversion,例如 19。

如果您使用较低版本编译 sdk,您将能够成功检测 apk。:)

干杯,苏曼

于 2015-02-11T19:02:27.267 回答