문제점이 있습니다. | -SubP1
| -SubP2결과 dex 파일에서 클래스를 제외하십시오.
모두 패키지로 android.media.IRemoteDisplay이 개 스텁 클래스 있습니다
P
:이처럼 보이는 프로젝트의 구조를 가지고있다. 그들은 구현이 다르지만 그건 중요하지 않습니다. Android에서 앱을 실행할 때 시스템 클래스로 대체 될 것입니다.
그러나 문제가 있습니다. dexMerger가 실패하기 때문에 프로젝트를 빌드 할 수 없습니다. 두 개의 충돌하는 클래스가 있다고합니다. 나는 그 오류를 이해할 수 - 결국, 정말이 개 충돌하는 클래스 :
있다하지만이 같은 build.gradle에서이 파일을 제외하려고하면 그것을 할 수 있기 때문에
sourceSets {
main {
java {
srcDir 'src'
exclude '**/android/media/**'
}
}
}
컴파일이 '실패 t android.media.IRemoteControlDisplay 클래스를 찾으십시오 (중첩 된 클래스 임).
어떻게 이러한 클래스를 계속 사용할 수 있지만 결과 DEX 파일에서 제외 할 수 있습니까?
DO NOT 문제는 컴파일 된 프로젝트에서 클래스를 제외 할 권리인지하시기 바랍니다 - 그것이 옳은 일이다, 나는 이미 그것을했지만 수동 - 다음 항아리에 SubP1 및 SubP2을 사전 컴파일하여 수동으로 제거를 IRemoteController.class 다음 P.에 그 항아리를 포함하여이 jar 파일에서
나는 또한 해당 솔루션에 만족 수 있습니다 :
1. 빌드 SubP1
2 SubP1.jar
에서 IRemoteControlDisplay.class를 제거 3 . SubP2 빌드
4. IRemoteControlDisplay.cla를 제거합니다. ss from SubP2.jar
5. 종속 항목으로 SubP1.jar 및 SubP2.jar를 P
에 추가하십시오. 6. 빌드 P
가능하면 알려주십시오.
DEX에 포함시키지 않으면 사용하려는 클래스를 찾지 못하기 때문에 앱을 강제 종료하게됩니다. –
왜 특정 폴더/파일뿐만 아니라 폴더 전체를 제외하고 있습니까? – Jim
오이겐, 내가하는 일을 안다. IRemoteControlDisplay는 시스템 패키지 android.media에있는 클래스이기 때문에 응용 프로그램이 강제로 중단되지 않습니다.일반적으로 액세스 할 수는 없지만 액세스해야합니다. 동일한 메소드 서명을 사용하여 스텁 클래스를 작성하여 액세스했습니다. 따라서 앱을 제외하면 앱이 시스템 구현을 호출합니다. BTW, 나는 이미 그것을했다 - 병을 컴파일하고 거기에서 .class 파일을 삭제하고 프로젝트에 그 병들을 포함시킨다. 하지만 이제는 더 자동적으로 유지하려고합니다. –