为android编译libkaliumjni和libsodium

本文详细介绍了如何在Android环境中编译libkaliumjni和libsodium库,首先从进入libsodium目录开始,逐步进行编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


两个项目在github上的地址:
https://github.com/joshjdevl/kalium-jni
https://github.com/jedisct1/libsodium
  • 按照顺序,先编译libsodiumcd libsodium
./autogen.sh

./ dist - build / android - arm . sh # for older ARMv6 devices
./ dist - build / android - armv7 - a . sh # for the more recent ARMv7devices
./dist-build/android-x86.sh# for the emulator / x86

devices
android-x86.sh这个文件其实是调用了androidbuild.sh

我在执行过程中遇到过两个问题:
1.提示  You should probably set ANDROID_NDK_HOME tothe directory containing
这需要去安装android ndk 相关的内容,具体方法自行查找。
记得去/etc/profile里面写PATH。
#NDK setting
export ANDROID_NDK_HOME=/home/chris/ndk/android-ndk-r9d
export PATH=$PATH:/home/chris/ndk/android-ndk-r9d/
之后可以手动source一下/etc/profile
然后运行echo $ANDROID_NDK_HOME    查看设置是否成功。(应该打印出你的ndk的地址)
2.因为PATH写法不对,引起ANDROID_NDK_HOME前面多了个冒号,导致file not found.

  • 建立link
#arm
ln - slibsodium - android - armv6libsodium - android -armeabi
ln - sandroid-toolchain - armv6android-toolchain -armeabi
#arm7
ln -s libsodium-android-armv7-a libsodium-android-armeabi-v7a


ln -s android-toolchain-armv7-a android-toolchain-armeabi-v7a #x86 ln -s libsodium-android-i686 libsodium-android-x86

ln -s android-toolchain-i686 android-toolchain-x86

  • 然后编译kalium-jni
cd  kalium-jni/jni
./compile.sh
在此过程中,根据出现的状况,做了以下修改
1.提示没有$JAVA_HOME  在确认了JAVA_HOME确实存在后,我在compile.sh里面注释掉了相关代码。
2.因为是编译给android,所以,注释掉 sudo cp /usr/local/lib/libsodium.* /usr/lib这一行
3.根据需要编译的版本(arm,arm7,mips,x86),选择性打开对应的编译行
4.因为是编译给android,所以,注释掉
gcc -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linuxsodium_wrap.c -shared -fPIC -L/usr/lib -lsodium -o$jnilib   
sudo rm -f $destlib/$jnilib 
sudo cp $jnilib $destlib
这三行,这三行是编译给pc需要用的。
5.根据libsodium和位置,将 所有的/install/替换成libsodium的位置。以本次为例,将/install/修改为/home/chris/csipsimplespecial/abstractj/,整个修改效果: /home/chris/csipsimplespecial/abstractj/libsodium/android-toolchain-x86/i686-linux-android/bin/gcc-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -I /home/chris/csipsimplespecial/abstractj/libsodium/libsodium-android-x86/includesodium_wrap.c -shared -fPIC -L /home/chris/csipsimplespecial/abstractj/libsodium/libsodium-android-x86/lib-lsodium -o $jnilib
6.因为sodium_wrap.c一直报错找不到这个,找不到哪个,后来发现他需要的内容全在libsodium/libsodium-android-i686/目录下面(x86对应这个目录)。所以直接把libsodium/libsodium-android-i686/目录下的include和lib两个目录拷贝到跟sodium_wrap.c同级的位置了。

  • 接下来,修改jni/Android.mk
同样将 所有的/install/替换成libsodium的位置
并且将$(TARGET_ARCH)换成 $(TARGET_ARCH_ABI)

  • ndk-build APP_ABI=armeabi,armeabi-v7a,x86  (根据需要决定编译哪个版本)
    
运行成功后,在kalium-jni/libs/x86/目录下出现libkaliumjni.so,直接把它拷贝到android项目里就可以用了。


因为我们的项目已经有直接使用.so的文件,所以并没有接下去进行jni的编译。
但还是把方法写下来,但并没有验证是否成功:

Finally, you need to compile the kalium JAR:

mvn clean install

It should end up in~/.m2/repository/org/abstractj/kalium/kalium-jni/1.0.0-SNAPSHOT/kalium-jni-1.0.0-SNAPSHOT.jar.Copy that to your libs directory as well. It isaccompanied by javadoc and sources JARs, which you can add intoEclipse to get the references.


部分攻略来自

stackoverflow.com/questions/26856443/android-eclipse-jedisct1-libsodium-where-to-start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值