2015-02-03 2 views
1

이 같은로드 라이브러리를 가지고 :로드 안드로이드 라이브러리

static { 
    System.loadLibrary("myLibrary"); 
    } 

이 대부분의 장치에서 잘 작동합니다.

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/com.google.android.maps.jar", zip file "/vendor/overlay/myBuild.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "myLibrary.so" 
at java.lang.Runtime.loadLibrary(Runtime.java:366) 
at java.lang.System.loadLibrary(System.java:989) 
at com.sony.foo.bar.<clinit>(myClass.java:20) 

here 원래 라이브러리 armeabi라는 이름의 폴더에 있던 새 armeabi-v7 폴더에 MYLIBRARY의 사본을 추가하려고 저를 묻는 메시지가 허용 대답 : 하나 개의 장치에, 그러나,이 스택 트레이스와 충돌이 발생 . 이것은 충돌을 수정했습니다.

나는 이것을 이해하려고 노력하고있다. 충돌 전화가 다른 CPU를 가지고 있다는 것을 의미합니까? CPU 식별자 앱은 다른 앱과 동일한 유형 (제조업체, 모델) 인 것으로 식별합니다. 충돌 전화가 armeabi-v7 인 경우 가장 많이 응답 된 here과 허용 된 답변 herehere은 전화가 armeabi 폴더의 라이브러리를 사용할 수 있어야합니다. 그렇지 않은가요?

마지막으로 apk에 동일한 라이브러리의 두 개의 동일한 복사본이 없도록이 수정 프로그램에 대한 더 나은 접근 방법이 있습니까?

답변

1

이것은 다른 버전의 응용 프로그램이/system/priv-app의 전화에 설치되어있는 것으로 나타났습니다. 그 중 하나를 제거하면 충돌을 방지 할 수 있습니다.

1

첫째, Android에는 armeabi-v7과 같은 이름이없고 올바른 이름은 armeabi-v7a입니다.

armeabi-v7aarmeabi의 라이브러리는 실제로 동일하지 않습니다. 당신이 ndk-build

APP_ABI := armeabi armeabi-v7a mips x86 

을 다음과 같은 파일 Application.mkAPP_ABI에 더 많은 값을 추가하면 라이브러리의 네 가지 유형의 폴더 libs/armeabi, libs/armeabi-v7a, libs/x86, libs/mips 생성됩니다있다. libs/armeabilibs/armeabi-v7a 사이의 파일을 비교하면 파일이 동일하지 않음을 알 수 있습니다. 지금까지, 나는 그들의 차이점을 말할 수 없다. 이 두 라이브러리는 크기가 약간 다르므로 두 라이브러리 사이에 큰 차이가 없다고 생각합니다.

대부분의 Android 기기에서 앱을 널리 지원하려면 armeabi-v7a을 추가하고 armeabi-v7a 디렉토리를 유지하는 것이 좋습니다.

무엇을하고 있는지 확실하면 armeabi 만 유지하십시오. 그런 다음 라이브러리를 assets 디렉토리에 둘 수 있습니다. 앱을 시작하고 실행하면 assets에서 라이브러리를 읽고 프레임 워크 패키지 관리자 시스템에 의존하지 않고 수동으로 System.load()을로드하여 앱을 설치할 때 라이브러리를 앱의 데이터 디렉토리에 추가해야합니다. 설치하라.

관련 문제