我可以成功地构建和运行我的Android应用程序在我的调试和发布变体没有问题。然而,当我尝试运行我的新单元测试时(我以前从来没有过),我得到了可怕的DexIndexOverflowException。我怀疑proguard
不是与我的单元测试一起运行的,而是与我的正常调试和发布构建类型一起运行的。
在单元测试运行配置中运行proguard
需要做什么?我搜索了Gradle文档、Proguard
文档和Android Studio文档,但什么也没有找到。
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
Android应用程序(APK)文件包含Dalvik可执行文件(DEX)形式的可执行字节码文件,其中包含用于运行应用程序的编译代码。Dalvik可执行规范将单个DEX文件中可引用的方法总数限制在65,536个,包括Android框架方法、库方法和您自己代码中的方法。要超过这个限制,就需要将应用程序构建过程配置为生成多个DEX文件,称为multidex配置。
Android SDK Build Tools21.1及更高版本中的Gradle Android插件支持multidex作为构建配置的一部分。在尝试为MultiDex配置应用程序之前,请确保使用SDK管理器将Android SDK Build Tools Tools和Android Support Repository更新到最新版本。
将应用程序开发项目设置为使用multidex配置需要对应用程序开发项目进行一些修改。具体而言,您需要执行以下步骤:
修改您的应用程序Gradle构建文件配置,以包括支持库并启用multidex输出。
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 25
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
android:name="android.support.multidex.MultiDexApplication">
</application>
</manifest>
public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
然后
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
android:name=".MyApplication">
</application>
</manifest>
虽然该库在大多数情况下修复了DEX64K问题,但它应该作为最后的手段来处理。在尝试使用它之前,您应该审核项目中不需要的依赖项,并使用ProGuard删除尽可能多的未使用的代码。
我已经创建了一个测试套件,使用数据提供商数据工厂和我的TestNG文件发送浏览器详细信息作为参数。在testNG XML中,我调用我的数据工厂类。我也在使用浏览器堆栈进行测试(尽管我怀疑这与我遇到的问题有关) 当我不向testng文件添加parrelell=“true”时,测试运行没有任何问题。 我有一种感觉,这与每个浏览器使用的是同一个驱动程序有关,但我目前无法解决这个问题。 感谢您的指导。 这
我们已经为spark编写了单元测试,在本地模式下有4个线程。 当一个接一个地启动时,例如通过intellij或sbt testOnly,每个测试都运行良好。 当用sbt测试启动时,它们会出现如下错误 我们使用的是一个带有多个子项目的sbt项目,其定义如下:
我试图使用localstack对SQS运行一些测试。然而,我一直得到一个502。这适用于同事,但在我的本地机器、我们的管道或docker上不起作用。错误到处都是一样的,所以我发送docker版本,因为它可能更容易显示安装了什么。 基本上,我正在创建一个docker镜像,安装java、python,并从/repo文件夹执行gradle构建,执行集成测试。 我的测试代码如下所示: 故障原因: 有什么想
我创建了一个简单的测试来尝试Junit 5: 这就是我使用的依赖关系: 堆栈跟踪是下一步: 知道哪里出了问题吗?
我正在和TestNG一起学习Java中的Selenium Webdriver。我正在使用谷歌登录页面进行测试。 我在按顺序运行测试用例时遇到了麻烦。我想做的是: 运行@BeforeTest 运行测试 1(登录成功) 运行@AfterTest(关闭浏览器和驱动程序) 等到 AfterTest 方法完成,然后运行测试 2(登录失败) 但我的经历是: 运行@BeforeTest 运行测试 1(登录成功)
注: 在testng xml中,如果我将parallel=更改为类或方法,那么它可以很好地运行测试,但它不是并行地一个接一个地运行测试。 如果我保持parallel=“tests”,那么它会并行运行,但它会在同一个VM中打开同一个浏览器三次,这是不正确的。 我的设置: 我设置了11个虚拟机,每个盒子上的每个浏览器都初始化了Selenium网格节点。我已经创建了testng xml,以便在每个框上运