Tôi đang cố sử dụng thư viện sqlitecipher yêu cầu sử dụng thư viện gốc. Hướng dẫn của họ rất đơn giản nhưng nó không hiệu quả với tôi. Mỗi khi tôi nhận được lỗi sau:Thư viện gốc (các tệp .so) không được thêm vào dự án android
FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.example.test-2.apk,libraryPath=/data/app-lib/org.example.test-2]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:535)
at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:141)
at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:136)
nó có nghĩa là các tệp này không được đính kèm trong khi biên soạn.
tất cả 3 tệp được lưu trữ trong thư mục/libs/armeabi /.
Tôi giả định rằng vấn đề là tôi sử dụng maven để quản lý các phụ thuộc (xây dựng được thực hiện bằng cách sử dụng Android Studio anyways). Lần thử tiếp theo - bao gồm các thư viện đó vào các phụ thuộc maven. Theo documentation nó là khá dễ dàng. Tôi không thể tìm thấy chúng trong một kho lưu trữ công cộng vì vậy tôi đã sử dụng <scope>system</scope>
bằng thẻ. Chúng được nhìn thấy nhưng nó không hoạt động. Sau đó tìm thấy this liên kết nơi người ta nói rằng phạm vi "hệ thống" sẽ không làm việc, thử thêm các thư viện vào kho lưu trữ địa phương sử dụng
mvn install:install-file -DgroupId=net.sqlitecipher -DartifactId=stlport_shared -Dversion=1.0 -Dfile=libstlport_shared.so -Dpackaging=so -DgeneratePom=true
cuối cùng - nó đã không làm việc.
Ngoài ra tôi thấy điều này topic, có lẽ đây là một giải pháp nhưng tôi không sử dụng gradle hiện tại. Có cách nào để bao gồm các tập tin .so vào apk mà không cần di chuyển từ maven sang gradle?
Như tôi đã hiểu Android Studio sử dụng gradle nội bộ để xây dựng apks, vì vậy tất cả những nỗ lực của tôi với maven là vô ích cho đến khi họ bắt đầu hỗ trợ thư viện bản địa, tôi có đúng không? Tôi cũng đã cố gắng xây dựng dự án với Intellij IDEA Cardea (13.0), thật không may mà không thành công.
Các tệp có thực sự trong APK không? Bạn có thể sử dụng giải nén để mở APK. – Frohnzie
đó là một vấn đề - chúng không có trong gói ứng dụng.Tôi có thể sao chép chúng vào thư mục tài sản và sau đó tải libs từ thư mục cụ thể (thực sự bình luận của bạn đã giúp tôi nhận ra rằng, cảm ơn) nhưng tôi muốn làm điều đó một cách thích hợp. Nó có thể trong tương lai. – Ruzard
NDK không được hỗ trợ trong AssetStudio/gradle. Bạn đã thử tạo dự án với Eclipse hay Ant chưa? Đối với một số lý do các tập tin .so không nhận được đóng gói. Nếu bạn quyết định sao chép tệp từ thư mục assest, hãy đảm bảo bạn sử dụng java.lang.Runtime.load và cung cấp đường dẫn đầy đủ. – Frohnzie