如何生成android端可用so

此文目的:
1.备忘录,方便自己今后查阅;
2.方便与大家交流和学习。
此文只是对所查阅的资料进行了整理。
说明:
1.以下两种方法在linux系统下或cygwin均可实现,本文是在linux系统下进行环境配置。
2.此文中所用NDK版本:Android-NDK-r6

一.android端so与Linux端so区别
android端处理器是arm处理器,一般PC端Linux系统使用x86处理器。所以,Linux端直接编译生成的so无法在
android端使用。

二.生成android端so
生成android端so有两种方法:
第一种:使用Android.mk文件和ndk-build命令
环境搭建:
1.下载NDK并解压压缩包:
android-ndk-r6-linux-x86.tar.bz2
解压后:(解压路径自定义)
android-ndk-r6

2.配置环境变量:
打开 /root/.bashrc,在文件最后添加NDK路径,如下:
export PATH=$PATH:/opt/androidEnv/android-ndk-r6(即NDK解压后的目录所在路径)
添加完毕后,执行以下命令,使新增环境变量生效:
source /root/.bashrc
执行完毕后,在终端输入以下命令:
env
可查看PATH的值,如PATH的值中存在 /opt/androidEnv/android-ndk-r6,则环境变量设置成功。

3.生成so的实例:
说明:此文中不阐述JNI相关的代码实现。
实例实现步骤:
01:创建AndroidsoTest目录;
02:在AndroidsoTest目录下创建jni目录(jni目录必须存在);
03:jni目录下存放如下三个文件(源文件和Android.mk文件必须存放于jni目录下):
JNItest.h  JNItest.c Android.mk
Android.mk文件来源:从NDK解压出的包中拷贝而来,路径如下:
/opt/androidEnv/android-ndk-r6/samples/hello-jni/jni
JNItest.h和JNItest.c文件为自己编写。(编写中所用JNI API相关不阐述)
04:对Android.mk文件进行修改,改为合适自己的项目。Android.mk文件中有如下几行:
/×××××××××××××××××××××××××××××××××××××××/
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

/×××××××××××××××××××××××××××××××××××××/

修改之后:
/××××××××××××××××××××××××××××××××××××/
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test        //此行决定生成的so文件的名称,此文中生成libtest.so
LOCAL_SRC_FILES := JNItest.c    //所要编译的c文件

include $(BUILD_SHARED_LIBRARY)
/××××××××××××××××××××××××××××××××××××/

05:使用ndk-build进行编译
打开终端,目录切入此测试项目所在的目录(即Android.mk所在目录),然后输入以下命令:
ndk-build
注:ndk-build所在路径已加入环境变量,所以可直接使用。

06:so文件已经生成
ndk-build执行完毕后,目录结构如下:
在AndroidsoTest目录下,存在以下三个目录:
jni libs obj
其中,libs和obj为新生成目录,且so文件存在于libs目录下。

此方法,建议参考书籍《细说Android4.0 NDK编程》

第二种:使用arm-linux-androideabi-gcc编译生成so文件
此方法与第一种方法的区别:
第一种方法直接使用ndk-build命令,无需自己编写makefile;
第二种方法不使用ndk-build命令,需自己指定编译所用gcc(其实就是编译工具链下的arm-linux-androideabi-gcc)
1.环境搭建
1.下载NDK并解压压缩包:
android-ndk-r6-linux-x86.tar.bz2
解压后:(解压路径自定义)
android-ndk-r6

2.使用NDK,创建自己的编译工具链:
进入android-ndk-r6目录,输入如下命令(命令均在同一行):
$/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/opt/androidEnv/myToolchains/toolchain-ndk-r6
其中,--install-dir的路径需自定义。

3.配置环境变量:
打开 /root/.bashrc,在文件最后添加如下一行:
export PATH=$PATH:/opt/androidEnv/myToolchains/toolchain-ndk-r6/bin
添加保存后,执行如下命令,使新增环境变量生效:
source /root/.bashrc

命令执行完毕后,使用以下命令可查看环境变量设置是否成功:
env

4.so文件生成实例:
01:创建AndroidsoTest目录;
02:AndroidsoTest目录下存在如下两个文件:
JNItest.h JNItest.c
03:打开终端,切到AndroidsoTest目录,执行如下命令:
./arm-linux-androideabi-gcc JNItest.c -fPIC -shared -o libtest.so

注:arm-linux-androideabi-gcc所在路径已加入环境变量,所以可直接使用。
到此,Android端so文件生成完毕。如有错误,请大家纠正。


建议:进行JNI开发,最好搭建完整的android开发环境(JDK、Eclipse、SDK、ADT、NDK)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值