gpt4 book ai didi

java - RenderScript 支持库的 IllegalAccessError

转载 作者:行者123 更新时间:2023-11-30 09:09:44 26 4
gpt4 key购买 nike

我正在开发一个旨在使用 Renderscript 支持库的应用程序。使用 Android Studio 0.5.4 和 Gradle 1.11 进行开发。

配置我使用的渲染脚本

android {
compileSdkVersion 19
buildToolsVersion "19.0.3"

defaultConfig {
minSdkVersion 10
targetSdkVersion 19
renderscriptTargetApi 19
renderscriptSupportMode true

}
}

这适用于 2.3 和 4.4.2。

在我的第一个屏幕之后,我想写一些测试来记录。 Atm 我使用 ActivityUnitTestCase 作为测试的祖先..我的测试代码在 src/androidTest/java 中,被 Android Studio 识别为 src 目录。我也可以使用真实设备成功启动测试用例。测试用例本身只是验证了几个 View 的存在。然而测试失败是因为:

java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

在堆栈跟踪的更下方,我看到它在第一次 renderscript 调用之前不久触发。查看生成的(未混淆的)apk 内部显示 Instrumentation Test apk 包含 android.support.v8.renderscript 包。

所以出现异常是因为被测apk和被测都包含了renderscript包。

我的问题:如何预防?

我使用了几个库,但它们没有出现在测试 apk 中。只有 renderscript 库同时处理 dex 文件和共享对象。我认为由于其深厚的 native 复杂性,它的处理方式不同于 nineoldandroids 等库。

我的 Google-Fu 显示只有解决方法,其中之一是 http://www.sinking.in/blog/android-dependency-double-trouble/其中还提到了继承问题http://issues.gradle.org/browse/GRADLE-784

但是那里提到的修复没有一个适用于渲染脚本库。

我感谢任何提示。谢谢。

最佳答案

这似乎是对当前处理支持渲染脚本库的 gradle 逻辑的限制。我通过将 renderscript-v8.jar 和预打包的 *.so 文件从/build-tools/19.0.3/renderscript 复制到适当的项目来解决这个问题。

*.so 文件添加到 main/jniLibs 下,自动检测并部署到适当的构建变体(arm7、mips、x86)。

jar 需要在 gradle 文件中声明,因为构建系统默认忽略 jar 文件:

dependencies{
compile files('libs/renderscript-v8.jar')
}

这种方法的好处是,在构建测试 apk 时,renderscript 支持包不会部署在测试 apk 中,因此测试运行时不会受到问题中提到的错误的干扰 (java.lang.IllegalAccessError: Class ref in预验证类解析为意外实现)

用起来会更聪明

renderscriptTargetApi 19
renderscriptSupportMode true

因为这样当前的性能增强会应用到相应的应用程序并且看起来更干净,因此更易于维护。但就我而言,可测试性 > 更新行为的开销更少。

一旦 renderscriptSupportMode 指令正常工作,我就切换回来。

关于java - RenderScript 支持库的 IllegalAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com