2011-12-08 2 views
5

나는 공유 객체를 가지고 있는데, libfoo.so라고 부르며 NDK에 대해 컴파일됩니다. 나는 자바 프로젝트, 나는 항아리로 내보내는 것이 항아리 안드로이드 응용 프로그램에서 원시 공유 객체를로드하는 방법은 무엇입니까?

System.loadLibrary("Foo"); 

를 호출하여 해당 공유 객체를 사용한다 자바 프로젝트를 (내가 'jarlib'를 부를 것이다), 그리고 안드로이드 응용 프로그램에서 사용할 수 있습니다. 공유 객체에 대한 모든 비트를 주석 처리하면 jar 파일이 올바르게 작동하고 완벽하게 상호 작용할 수 있습니다.

jarlib를 Unity android 응용 프로그램의 공유 객체와 함께 ./lib/armeabi/libFoo.so의 공유 객체와 함께 사용할 수 있으며 모든 peachy를로드합니다.

내 unity 안드로이드 애플 리케이션에서 jarlib과 libFoo.so를 사용하려고합니다. 그리고 loadLibrary는 libFoo.so를 찾기를 절대적으로 거부합니다. 나는 ./lib뿐만 아니라 ./lib/armeabi에있는 apk에 포함될 것이므로 배치하려고 시도했다. 아무것도로드 호출을하는 것처럼 보이지 않는다.

나는 ./lib에서 libFoo.so 또는 jarlib의 ./lib/armeabi 포함했지만, 내가 빌드하려고하면/내 안드로이드 응용 프로그램을 실행 한은, 나는 말했다 해요 :

The library 'jarlib.jar' contains native libraries that will not run on the device. 
The following libraries were found: 
    - libFoo.so 
그것은 ./lib에 있다면이와

, 내가 누락 어떤 조합 모르겠지만, 나는 그것을 할 수 있습니다 확신

Additionally some of those libraries will interfer with the installation of the application because of their location in lib/ 
lib/ is reserved for NDK libraries. 

을 (./lib/armeabi되지 않음), 나는 단지 그것을하는 방법을 알아낼 수없는 것!

답변

6

글쎄! 그것은 너무 작아서 8 시간의 두통을 일으켰습니다.

내가 libFoo.so가 내 app.apk/lib/armeabi/libFoo.so에 나타나지 않는 것을 알았습니다. 단합으로 apk를 만들 때처럼. 나는 그것과 관련이 있다고 가정 했으므로 lib 폴더가 apk에 복사되었는지 확인하기위한 설정을하기 시작했다.

./lib/libFoo.so 
-and- 
./lib/armeabi/libFoo.so 

밝혀, 무엇을 : 그것이 나오는 것에 따라

의 lib 폴더가 없습니다, 그러나를 ...

내가 (안드로이드 응용 프로그램 측에서) 나는 그것을 시도했다 방법을 기억하다 내가해야 할 일은 비슷한 경로에 놓는 것이 었습니다. 오 너무 유사합니다.

./libs/armeabi/libFoo.so 

예. libs. 입니다.

실제로 'libs'폴더의 이름을 'libs'로 바꿨을 때 bin 또는 res 폴더에있는 것과 같이 작은 Android 기호가 표시되도록 eclipse에서 폴더 아이콘을 변경했습니다. 그리고 확실히, apk를 빌드 할 때 lib/armeabi 폴더가 있습니다 (apk에 'lib'라는 이름이 붙어 있고 libs가 아닙니다).

내 동료 중 한 명입니다. (저 전에이 프로젝트에서 작업하고 있던) 저에게 그 라인을 따라 어딘가에 폴더가 'lib'이었지만 안드로이드 SDK의 이후 버전에서는 'libs'로 변경되었다고 말했습니다. 어느 쪽이든, 방금이 프로젝트를 집어 들고 나에게 폴더가 'lib'라는 이름으로되어 있어야한다는 것을 깨닫지 못했습니다. 나는 내 머리카락을 꺼낼 준비가되었다. 나는 누군가가 똑같은 문제를 가지고 있고 조금 더 빨리 해결할 수 있기를 희망하며 여기를 남겨두고있다.

관련 문제