2011-12-08 10 views
5

Mam obiekt współdzielony, który nazwać "libFoo.so", skompilowany przeciwko NDK. Mam projektu Java (nazwijmy go „jarlib”), która korzysta z tego obiektu udostępnionego przez wywołanieJak załadować macierzysty obiekt udostępniony w słoiku z aplikacji na Androida?

System.loadLibrary("Foo"); 

To projekt Java, I eksportować jako słoik i używać w aplikacji Android. Jeśli skomentuję wszystkie bity dotyczące współużytkowanego obiektu, słoik działa dobrze i mogę z nim doskonale współdziałać.

Mogę używać jarlib, wraz z udostępnionym obiektem z aplikacji Android Unity z udostępnionym obiektem w ./lib/armeabi/libFoo.so, i ładuje to wszystko dookoła.

Próbuję użyć jarlib i libFoo.so w mojej aplikacji Android na Androida, a loadLibrary absolutnie nie chce znaleźć libFoo.so. Próbowałem umieścić go tak, aby był zawarty w moim apk w ./lib, a także ./lib/armeabi, i nic nie sprawia, że ​​wywołanie load go zobaczy.

Próbowałem tym libfoo.so w ./lib lub ./lib/armeabi z jarlib, ale gdy próbuję zbudować/uruchomić mój Android App, jak mi powiedziano:

The library 'jarlib.jar' contains native libraries that will not run on the device. 
The following libraries were found: 
    - libFoo.so 

z tym, jeśli jest to w ./lib (nie ./lib/armeabi)

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. 

nie jestem pewien, co kombinacja mi brakuje, ale jestem pewien, że można to zrobić, po prostu nie potrafię wymyślić, jak to zrobić!

Odpowiedz

6

Dobrze! Okazuje się, że było to coś tak małego, że spowodowało mi osiem godzin bólu głowy.

Znalazłem, że moja libFoo.so nie pojawiła się w mojej app.apk/lib/armeabi/libFoo.so jak wtedy, gdy jedność zbudowała apki. Sądziłem, że ma to coś wspólnego z tym, więc zacząłem szukać ustawień, aby upewnić się, że mój folder lib został skopiowany do apk.

Jak się okazuje, folder lib nie jest jednak ...

Pamiętasz jak powiedziałem, że próbował go (na androida strona oprogramowania)

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

okazuje, co Musiałem zrobić to na podobną ścieżkę. Och, tak podobne.

./libs/armeabi/libFoo.so 

Tak. libs. Z s.

W rzeczywistości, kiedy zmieniłem nazwę mojego folderu "lib" na "biblioteki", zmieniło się ikona folderu w eclipse, aby mieć mały symbol androidu na nim, taki jak folder bin lub res. I na pewno, kiedy budujesz apk, znajduje się tam folder lib/armeabi (zwróć uwagę, że nazywa się "lib" w apk, a nie "libs".) To nadal mnie myli.)

Jeden z moich współpracowników (który pracował nad tym projektem przede mną) powiedział mi, że gdzieś po linii folder był "lib", ale został zmieniony na "libs" w późniejszej wersji Androida SDK. Tak czy owak, po wzięciu udziału w tym projekcie nie zdawałem sobie sprawy, że folder powinien mieć nazwę "lib", ponieważ wydawało mi się to w porządku. Byłem gotowy wyciągnąć włosy. Zostawiam to tutaj w nadziei, że KOGOŚ ma taki sam problem jak ja i uda mi się go rozwiązać nieco szybciej.

Powiązane problemy