2011-12-08 15 views
5

Tôi có một đối tượng dùng chung, cái mà tôi sẽ gọi là 'libFoo.so', được biên dịch dựa vào NDK. Tôi có một dự án java (Tôi sẽ gọi nó là 'jarlib') mà làm cho sử dụng các đối tượng chia sẻ, bằng cách gọiLàm thế nào để tải một đối tượng được chia sẻ bản địa, trong một cái lọ, từ một ứng dụng Android?

System.loadLibrary("Foo"); 

Đó dự án java, tôi xuất khẩu như một cái bình, và sử dụng trong một ứng dụng Android. Nếu tôi nhận xét tất cả các bit về đối tượng được chia sẻ, jar hoạt động tốt và tôi có thể tương tác với nó một cách hoàn hảo.

Tôi có thể sử dụng jarlib, cùng với đối tượng được chia sẻ từ ứng dụng Android Unity với đối tượng được chia sẻ trong ./lib/armeabi/libFoo.so và tải nó lên tất cả đào.

Tôi đang cố gắng sử dụng jarlib và libFoo.so trong ứng dụng android không thống nhất của tôi và loadLibrary hoàn toàn từ chối tìm libFoo.so. Tôi đã thử đặt nó vì vậy nó sẽ được bao gồm trong gói ứng dụng của tôi trong ./lib, cũng như ./lib/armeabi, và không có gì có vẻ làm cho cuộc gọi tải nhìn thấy nó.

Tôi đã thử bao gồm libFoo.so trong ./lib hoặc ./lib/armeabi của jarlib, nhưng một khi tôi cố gắng xây dựng/chạy ứng dụng Android của tôi, tôi nói:

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

với điều này, nếu nó trong ./lib (không ./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. 

tôi không chắc chắn những gì kết hợp tôi đang mất tích, nhưng tôi chắc chắn rằng nó có thể được thực hiện, tôi chỉ dường như không thể tìm ra cách để làm điều đó!

Trả lời

6

Vâng! Hóa ra đó là một cái gì đó rất nhỏ, khiến tôi bị đau đầu trong tám giờ.

Tôi thấy rằng libFoo.so của tôi không hiển thị trong app.apk/lib/armeabi/libFoo.so giống như khi hợp nhất xây dựng các apks. Tôi cho rằng nó có liên quan đến điều đó, vì vậy tôi bắt đầu tìm kiếm các cài đặt để đảm bảo rằng thư mục lib của tôi đã được sao chép vào gói ứng dụng.

Khi nó quay ra, thư mục lib là không, tuy nhiên ...

Ghi làm thế nào tôi nói rằng tôi đã thử nó trong (ở phía ứng dụng android):

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

Hóa ra, những gì Tôi cần làm là đặt nó vào một con đường tương tự. Oh rất giống nhau.

./libs/armeabi/libFoo.so 

Vâng. libs. Với s.

Trong thực tế, khi tôi đổi tên thư mục 'lib' thành 'libs', nó đã thay đổi biểu tượng của thư mục trong nhật thực để có biểu tượng android nhỏ trên đó, như bin hoặc thư mục res. Và chắc chắn đủ, khi bạn xây dựng các gói ứng dụng, thư mục lib/armeabi là có (thông báo nó được đặt tên là 'lib' trong apk, và không phải 'libs'. Điều này vẫn còn gây nhầm lẫn cho tôi.)

Một trong những đồng nghiệp của tôi (đã làm việc trong dự án này trước tôi) nói với tôi rằng ở đâu đó dọc theo dòng, thư mục từng là 'lib', nhưng sau đó được thay đổi thành 'libs' trong phiên bản sau của SDK Android. Dù bằng cách nào, vừa chọn dự án này, tôi đã không nhận ra rằng thư mục nên được đặt tên là 'lib', vì nó có vẻ ổn với tôi. Tôi chuẩn bị kéo tóc ra. Tôi đang rời khỏi đây với hy vọng rằng MỘT NGƯỜI có cùng một vấn đề tôi đã làm, và quản lý để giải quyết nó nhanh hơn một chút.

Các vấn đề liên quan