2012-01-11 32 views
5

Tôi đang cố gắng xây dựng một dự án cỡ trung bình trong Eclipse. Nó bao gồm dự án ứng dụng chính và hai thư viện Android. Mọi thứ hoạt động tốt cho đến khi tôi thêm một thư viện JNI rất đơn giản vào dự án chính.Thư viện NDK của Android: findLibrary trả về số trống

Khi tôi chạy các ứng dụng trên thiết bị của tôi nhìn thấy ngoại lệ này trong LogCat:

01-11 17: 19: 01,421: E/AndroidRuntime (26.569): tại java.lang.Runtime.loadLibrary (Runtime.java:429) không thể tải xxx: findLibrary trở rỗng

tôi googled xung quanh các vấn đề tương tự và tôi tin rằng tôi đã làm tất cả mọi thứ một cách chính xác:

  1. duy nhất tập tin .c và tập tin Android.mk được đặt trong thư mục 'JNI'
  2. tôi xây dựng thư viện với ndk-công cụ xây dựng
  3. Thư viện .so được đặt một cách chính xác trong 'libs \ armeabi' thư mục
  4. tôi thấy rằng kết quả các tập tin apk không thực sự chứa thư viện mẹ đẻ của tôi

Khi tôi tạo một dự án thử nghiệm và liên kết đến mã nguồn gốc rất giống nhau - nó hoạt động tốt. Vấn đề vẫn tồn tại trong dự án chính. Tôi đã cố gắng để tạo ra dự án Eclipse từ đầu nhưng nó không giúp

tôi sử dụng Android Công cụ SDK câu 16

bất cứ ai có thể vui lòng giúp tôi với một đề nghị?

Cảm ơn!

Trả lời

4

Ok, sau hai ngày chiến đấu với Android SDK, tôi đã giải quyết được vấn đề của mình. Đây là một số giải thích chỉ trong trường hợp nó có thể giúp bất cứ ai khác.

cấu trúc dự án trước đây của tôi:

  1. dự án Android Lib1 (với mã JNI riêng của nó)
  2. dự án
  3. Android Lib2 (phụ thuộc vào Lib1)
  4. dự án App1 (phụ thuộc vào Lib2)
  5. App2 dự án (với mã jni riêng của nó; phụ thuộc vào Lib2)

Vấn đề ban đầu đã được nhìn thấy khi tôi cố gắng tải jni libr ary trong App2. Tôi vẫn không hiểu những gì đã ngăn chặn thời gian chạy từ việc tìm kiếm jni trong App2.

Tuy nhiên, giải pháp là xóa dự án Lib1 khỏi không gian làm việc và thêm nó dưới dạng tệp JAR vào Lib2 và cả Ứng dụng. Bây giờ tôi cuối cùng có thể sử dụng tải jni lib trong App2.

+1

Bạn có thể làm rõ ý bạn là gì? Tôi hiện đang gặp sự cố tương tự nhưng bị nhầm lẫn bởi thiết lập của bạn. Tôi có một dự án Android duy nhất tùy thuộc vào một thư viện JNI duy nhất, chỉ có một tệp .c/.h bên trong nó. – JuiCe

+0

@JuiCe Tôi nghĩ rằng vấn đề của bạn không liên quan đến những gì tôi đã trải qua. Vấn đề của tôi đã được gây ra bởi cố gắng để tải thư viện JNI cư trú trong một dự án thư viện Android. Bạn nên kiểm tra các bài viết khác về chủ đề này – Anton

+0

Có được nó làm việc, cảm ơn cho phản ứng mặc dù. – JuiCe

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