2014-11-11 20 views
6

Tôi có một chương trình cần thực thi mã hóa libsodium. Tôi tìm thấy thư viện này libsodium nhưng tôi nghĩ rằng nó cần phải được sử dụng với NDK. Và vì vậy tôi bắt đầu đọc hướng dẫn về NDK nhưng tôi vẫn không biết bắt đầu từ đâu khi sử dụng thư viện này. Nếu ai đó có thể đưa ra một gợi ý hoặc những thứ rất hữu ích để đưa ra một ý tưởng về cách tích hợp thư viện này, tôi sẽ rất hạnh phúc.eclipse jedisct1/libsodium nơi bắt đầu

Cảm ơn

Trả lời

10

Thực hiện lồng ghép libsodium vào ứng dụng của Android, bạn cần:

  • Thư viện libsodium biên soạn cho nền tảng của bạn Android (s)
  • Một JNI ràng buộc như kalium-jni

Nếu bạn tin tưởng những người ngẫu nhiên trên Internet (mà bạn không nên!), Hãy tải xuống this tarball và trích xuất nó vào dự án của bạn ource. Nếu không, hãy làm theo các hướng dẫn dưới đây để tự biên dịch.

libsodium

Bạn cần một hộp Linux/VM với Android NDK để biên dịch các thư viện libsodium chia sẻ, và nó có vẻ như bạn cần git branch chủ hiện tại để biên dịch nó với NDK. Một khi bạn đã kiểm tra nó ra, biên dịch mã thư viện Android cho ARM, ARMv7 và x86:

./autogen.sh 
./dist-build/android-arm.sh # for older ARMv6 devices 
./dist-build/android-armv7-a.sh # for the more recent ARMv7 devices 
./dist-build/android-x86.sh # for the emulator/x86 devices 
# Provide the directory names nkd-build expects 
ln -s libsodium-android-armv6 libsodium-android-armeabi 
ln -s libsodium-android-armv7-a libsodium-android-armeabi-v7a 
ln -s libsodium-android-i686 libsodium-android-x86 

kalium-JNI

Để biên dịch kalium, bạn sẽ cần phải cài đặt SWIG. Sau đó, bạn cần tạo trình bao bọc SWIG C, biên dịch mã nguồn gốc libkaliumjni cho (các) nền tảng đích của bạn, cài đặt nó vào thư mục libs/app của bạn và bao gồm JAR.

Trong kalium-JNI/JNI tiểu thư mục, tạo ra các wrapper SWIG và libkaliumjni.so bản địa cho máy chủ của bạn (nó sẽ là cần thiết để kiểm tra JAR):

./compile.sh 

Sau đó, sửa đổi jni/Android.mk và thay thế /installs/ với libsodium bất cứ nơi nào bạn đã biên soạn, và $(TARGET_ARCH) với $(TARGET_ARCH_ABI) sau đó chạy trong thư mục kalium-JNI:

ndk-build APP_ABI=armeabi,armeabi-v7a,x86 
[...] 
[x86] Install  : libkaliumjni.so => libs/x86/libkaliumjni.so 
[armeabi] Install  : libkaliumjni.so => libs/armeabi/libkaliumjni.so 
[armeabi-v7a] Install  : libkaliumjni.so => libs/armeabi-v7a/libkaliumjni.so 

Bây giờ thư mục chứa libs/ các thư viện kalium bản địa. Sao chép nó vào dự án Android của bạn.

Cuối cùng, bạn cần phải biên dịch JAR kalium:

mvn clean install 

Nó nên kết thúc trong ~/.m2/repository/org/abstractj/kalium/kalium-jni/1.0.0-SNAPSHOT/kalium-jni-1.0.0-SNAPSHOT.jar. Sao chép thư mục đó vào thư mục libs của bạn. Nó đi kèm với javadoc và các nguồn JAR, mà bạn có thể thêm vào Eclipse để lấy các tham chiếu.

+0

Xây dựng sodium armv7 của bạn sẽ không được chọn, armv5 sẽ được sử dụng cho các bản vẽ armv5 và armv7. Để thay đổi điều đó, bạn nên đổi tên 'libsodium-android-arm' thành' libsodium-android-armeabi' và thay đổi 'TARGET_ARCH' bằng' TARGET_ARCH_ABI' bên trong * jni/Android.mk *. Ngoài ra, bạn có thể thêm dễ dàng x86 vào danh sách các nền tảng được hỗ trợ: './dist-build/android-x86.sh && ln-libsodium-android-i686 libsodium-android-x86' và 'ndk-build APP_ABI = armeabi, armeabi-v7a, x86' – ph0b

+1

Cảm ơn @ ph0b, tôi đã cập nhật hướng dẫn và thêm tarball mới với x86 .so và (hy vọng) cố định arm7 xây dựng – ge0rg

+0

Tôi theo hướng dẫn libsodium. Bây giờ sau khi chạy kịch bản do_the_job.sh, tôi kết thúc với các tệp .so. Làm thế nào bây giờ tôi có thể có được .jar? Bởi vì bây giờ tôi không biết cách sử dụng thư viện. – user1007522

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