Mutlidex를 사용할 때 Android Test가 움직이지 않는 문제 및 처리 방법
5280 단어 Android
문제점 발견
나는
AndroidKeyStore
를 사용하는데 encrypt
할 수 있는지 없는지decrypt
의 테스트를 쓰고 싶다.특히 이 일대가 HW와도 관련이 있기 때문에 나는 모크가 게으름 피우지 않고 실기(또는 시뮬레이터)로 시험을 쓸 생각을 하기 시작했다.encrypt
만든 것decrypt
, 원래 텍스트로 쓰는 테스트, 안드로이드 8.시뮬레이터 1개로 작동한 후, 시험 가동이 양호하다.그리고 몇 가지를 수정해서 최종적으로SUCCESS
의 문자가 종착역에 도착했다.항상 그랬으면 좋겠다
AndroidKeyStore
주변의 API는 안드로이드 6이다.0부터 큰 변화가 있었기 때문에 minSDK 버전으로 지정된 안드로이드 4입니다.그런데 한번 해 봤는데 문제가 생겼어요.com.android.builder.testing.ConnectedDevice > No tests found.[Nexus_5X_API_18(AVD) - 4.3.1] FAILED
No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don't inherit from TestCase or lack @Test annotations).
그나저나 AS에서 테스트 파일을 열고 테스트반 왼쪽에 보이는 단일 실행 버튼을 누르면 성공적으로 실행할 수 있겠지...그때의build.gradle
build.gradle
android {
defaultConfig {
:
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
:
}
dependencies {
:
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
이렇게 되면 적어도 안드로이드 8은 됩니다.1의 시뮬레이터가 잘 돌아가야 한다는 것을 확인했다.까닭
The issue is that the main dex list for the test APK does not contain the test classes. AndroidJUnitRunner when looking for the test classes, does not uses the patched class loader that contains all dex files, but it only examines classes.dex. Therefore, it does not find any test classes to run.
여기에 적힌 것이 전부인데 덧붙이자면
AndroidJUnitRunner
그냥 보기classes.dex
, 즉 classesN.dex
등이 무시되는 것이 문제라는 것이다.muttlidex를ture로 할 때 이런 느낌으로 여러 개의 dex 파일을 만들 수 있습니다.
가장 중요한 시험반을 찾아보면
classes2.dex
안에 있다는 것을 알 수 있다.AndroidJUnitRunner
보지 않고classes2.dex
만 본다classes.dex
.그래서
No tests found.
.해결책
아까와 같은 링크에도workaround라고 쓰여 있습니다.
android.enableD8MainDexList=false
as this will make as keep all annotated classes in the main dex. Even though that is not the required for the legacy multidex to work, it will fix the issue for this particular case.
gradle.properties
에 기술android.enableD8MainDexList=false
을 통해 해결한다.이것을 기술하면 모조된 클래스를main의 dex 파일에 넣을 수 있다고 합니다.
해봤는데
build.gradle
아래도 필요해요.build.gradle
dependencies {
:
androidTestImplementation 'com.android.support:multidex-instrumentation:1.0.3'
}
여기까지 하고 드디어 안드로이드 4.그렇지만 시험에 통과했어요.확인
혹시 모르니까
keep all annotated classes in the main dex
이것도 확인해 보세요.그렇군요. 확실히
classes.dex
에서 테스트반을 발견했습니다.총결산
멀티텍스에서 androidTest를 이동하고 싶다면 이런 느낌입니다.
build.gradle
android {
defaultConfig {
:
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
:
}
dependencies {
:
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support:multidex-instrumentation:1.0.3'
}
gradle.properties:
android.enableD8MainDexList=false
Reference
이 문제에 관하여(Mutlidex를 사용할 때 Android Test가 움직이지 않는 문제 및 처리 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kgmyshin/items/654143cdddef8bacbbec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)