2014-04-07 4 views
2

Renderscript Support Library를 사용하는 App에서 작업하고 있습니다. 개발 용 Android Studio 0.5.4 및 Gradle 1.11이 사용됩니다. RenderScript 지원 라이브러리가있는 IllegalAccessError

내가이 2.3과 4.4.2에서 작동

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.3" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 19 
     renderscriptTargetApi 19 
     renderscriptSupportMode true 

    } 
} 

를 사용 renderscript을 구성합니다.

첫 번째 화면이 끝나면 몇 가지 테스트를 작성하여 문서화하고 싶습니다. Atm ActivityUnitTestCase를 테스트의 조상으로 사용합니다 .. 내 테스트 코드는 src/androidTest/java에 있으며, Android Studio는 src 디렉토리로 식별됩니다. 실제 장치를 사용하여 테스트 케이스를 성공적으로 시작할 수도 있습니다. 테스트 케이스 자체는 단지 몇 가지 뷰의 존재를 확인합니다. 시험 때문에 실패 그러나 : 스택 추적에서 더 아래로

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

나는 그것의 바로 처음 renderscript 호출하기 전에 트리거 것을 알 수있다. 생성 된 (난독 화되지 않은) apk 내부를 살펴보면 Instrumentation Test apk에 android.support.v8.renderscript 패키지가 포함되어 있음을 알 수 있습니다.

테스트중인 apk와 테스트에 모두 렌더 스크립트 패키지가 포함되어 있으므로 예외가 발생합니다.

내 질문 : 어떻게 방지합니까?

여러 라이브러리를 사용하며 테스트 apk에 나타나지 않습니다. renderscript 라이브러리는 dex 파일과 공유 객체를 모두 사용합니다. 나는 가정의 등 nineoldandroids 같은 라이브러리를 다르게 처리한다는 깊은 고유의 복잡성에 그것으로 인해

내 구글 - 푸 그들 중 하나가 또한 inheritent 문제를 언급 http://www.sinking.in/blog/android-dependency-double-trouble/ 되고, 유일한 해결 방법이 있다는 것을 밝혀

http://issues.gradle.org/browse/GRADLE-784

그러나 여기에 언급 된 수정 사항 중 일부는 렌더 스크립트 lib에도 적용되지 않습니다.

모든 힌트에 감사드립니다. 고맙습니다.

답변

2

지원 렌더러 lib를 처리 할 때 현재의 그래디언트 논리가 제한적인 것처럼 보입니다. renderscript-v8.jar 및 미리 패키지화 된 * .so 파일을 /build-tools/19.0.3/renderscript에서 해당 프로젝트로 복사하여 해결합니다.

* .so 파일은 main/jniLibs 아래에 추가되며 자동으로 감지되어 해당 빌드 변형 (arm7, mips, x86)에 배포됩니다. 테스트 APK를 구축 할 때

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

은이 방법의 장점은 renderscript 지원 패키지에 배포되지 않은 것을 :

항아리는 buildsystem 기본적으로 jar 파일을 무시하기 때문에 Gradle을 파일에 발표해야 테스트 apk 및 따라서 테스트는 질문에 언급 된 버그에 간섭하지 않고 실행됩니다 (java.lang.있는 IllegalAccessError : 예상치 못한 구현에 해결 사전 검증 클래스의 클래스 심판)

현재의 성능 향상이 해당 응용 프로그램에 적용되는 방법 때문에

renderscriptTargetApi 19 
renderscriptSupportMode true 

를 사용하는 스마트 것하고, 따라서, 청소기 보인다 유지 관리가 더 쉽다. 하지만 내 부분에 대한 테스트 가능성> 업데이트 동작의 오버 헤드가 적습니다.

renderscriptSupportMode 지시어가 제대로 작동하면 다시 전환됩니다.

0

이 stackoverflow 대답 (etsy의 개발자)에 따르면 renderscript는 gradle에서 작동하지 않습니다. Blur effect like in the app Etsy? 이유를 모르겠다 며칠 전이 책을 읽었습니다.

+0

당신이 템플릿 https://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/rsSupportMode/build.gradle으로 다음 Gradle을 조각을 사용하는 경우는로드해야 해달라고 작동 네이티브 부분의 코드에서는 라이브러리가이를 수행하고 gradle은 mips, arm 및 x86에 대한 맛을 추가합니다. 그리고 그것들을 (또한 기본적으로) 만듭니다. 필자는 x86 에뮬레이터와 암 장치에서이를 테스트했습니다. arm5/6 지원이 없기 때문에 arm7이 아니라 arm이 아닌 abi 필터를 설정했습니다. –

관련 문제