两个项目在github上的地址:
https://github.com/joshjdevl/kalium-jni
https://github.com/jedisct1/libsodium
- 按照顺序,先编译libsodiumcd libsodium
./ 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.提示
这需要去安装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
2.因为PATH写法不对,引起ANDROID_NDK_HOME前面多了个冒号,导致file not found.
- 建立link
ln - slibsodium - android - armv6libsodium - android -armeabi
ln - sandroid-toolchain - armv6android-toolchain -armeabi
#arm7
ln -s libsodium-android-armv7-a libsodium-android-armeabi-v7a
l
ln -s libsodium-android-i686 libsodium-android-x86
n -s android-toolchain-armv7-a android-toolchain-armeabi-v7a #x86
ln
-s android-toolchain-i686 android-toolchain-x86
- 然后编译kalium-jni
./compile.sh
在此过程中,根据出现的状况,做了以下修改
1.提示没有$JAVA_HOME
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
并且将$(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