android eclipse jedisct1/libsodium 从哪里开始

标签 android eclipse android-ndk libsodium

我有一个程序需要执行 libsodium 加密。我找到了这个图书馆 libsodium 但我认为它需要与 NDK 一起使用。所以我开始阅读有关 NDK 的教程,但我仍然不知道从哪里开始使用这个库。如果有人可以提供提示或非常有用的东西来提供有关如何集成此库的想法,我将非常高兴。

谢谢

最佳答案

要将 libsodium 集成到您的 Android 应用中,您需要:

  • 为您的 Android 平台编译的 libsodium 库
  • JNI 绑定(bind),如 kalium-jni

如果您信任 Internet 上的随机人员(您不应该信任!),请下载 this tarball并将其提取到您的项目源中。否则,请按照以下说明自行编译。

钠盐

您需要一个带有 Android NDK 的 Linux box/VM 来编译 libsodium 共享库,而且您似乎需要当前的 git master 分支来使用 NDK 编译它。 checkout 后,为 ARM、ARMv7 和 x86 编译 Android 库代码:

./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

钾-jni

要编译 kalium,您需要 SWIG安装。然后,您需要生成 SWIG C 包装器,为您的目标平台编译 libkaliumjni native 代码,将其安装到您的应用程序 libs/目录并包含 JAR。

在 kalium-jni/jni 子目录中,为您的主机创建 SWIG 包装器和 native libkaliumjni.so(测试 JAR 需要它):

./compile.sh

然后,修改jni/Android.mk 并将/installs/ 替换为您编译libsodium 的位置,将$(TARGET_ARCH) 替换为$(TARGET_ARCH_ABI) 然后在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

现在 libs/ 目录包含本地 kalium 库。将其复制到您的 Android 项目中。

最后,您需要编译 kalium JAR:

mvn clean install

它应该在 ~/.m2/repository/org/abstractj/kalium/kalium-jni/1.0.0-SNAPSHOT/kalium-jni-1.0.0-SNAPSHOT.jar 中结束。也将其复制到您的 libs 目录。它附带 javadoc 和源代码 JAR,您可以将其添加到 Eclipse 中以获取引用。

关于android eclipse jedisct1/libsodium 从哪里开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26856443/

相关文章:

android - 未找到 JNI_OnLoad 跳过 init > 应用程序关闭

Android - 如何检查我的应用程序之前是否已安装到设备?

java - Intent.createChooser 得到 java.lang.SecurityException

android - 为什么 Google Cloud Endpoints 会颠倒我的参数顺序?

Eclipse:用于剪切、复制和粘贴的堆叠还是堆叠?

Android NDK assert.h 问题

android - 如何在 Android 中只给 RelativeLayout 下边框

java - 在 Pydev 中同时使用 Python 和 Java 的 Jython

java - JFace:更改 TreeViewer 中 TreeItem 的颜色

java - jni - 应用程序崩溃