Android调用so文件(C代码库)方法详解
来源:互联网 发布:php开源网站源码 编辑:程序博客网 时间:2024/04/30 03:27
一、为什么调用c的dll要用源码编译成so库
Android系统是基于linux内核的移动终端系统,而dll是在windows环境下生成和调用的c库,所以不可以直接为android系统调用。二、安装
(I)安装cygwin
1.下载cygwincygwin可以在windows上虚拟unix编译环境,还内置了许多linux的编辑器等工具,可供选择安装。在本项目中cygwin主要用来编译生成so库。所以重在安装gcc、make包。
到http://cygwin.com/setup.exe下载安装程序
2.选择“install from Internet”
3.选择安装目录
4.选择下载存储目录
5.选择“Direct Connection”
6.选择一个镜像点进行下载
我一开始选了个感觉比较近的给力的mirrors.163.com(速度300-400k左右),结果下载到51%不走了(1个小时左右),后来乖乖的换回mirrors.kernel.org速度有点慢,但安装成功了(40k左右,出去溜达了,不知道用了多长时间,中午开始的晚上6点回来的)。7.Category栏找到Devel点击右侧使Default变成install,其他包默认。安装即可。
8.测试。桌面点开该程序,输入make-v,gcc-v指令测试。
(II)安装ndk
1.下载ndk(window.zip版本),例如android-ndk-r8-windows.zip2.解压到一个目录,如D:\android\android-ndk-r8
3.打开cygwin安装目录下home\Administrator\.bash_profile,并在末尾追加
NDK=/cygdrive/d/android/android-ndk-r8
export NDK
(传说要用vim或nodepad打开,否则cygwin不认,我本来就用的vim,所以没试验过直接用txt打开的后果)。
4.重新启动,输入cd $NDK回车,界面应如下:
三、第一个调用so的Android工程
1.新建android工程(MyFirstJNI)2.修改代码,如下:
public class JniTest extends Activity{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// setContentView(R.layout.main);TextView tv = new TextView(this);tv.setText(""+intFromJNI());setContentView(tv);}public static native int intFromJNI();//口static {System.loadLibrary("MyFirstJNI");}}
其中intFromJNI为要从so中调用的函数。我们要先为so文件生成.h文件。
3.通过cygwin跳转到Android工程的bin\classes目录下,然后输入javah命令对.class文件进行编译。如:
javah -jni com.will.myfirstjni.MyFirstJni
编译成功会在classes目录下生成.h文件,如:
com_will_myfirstjni_MyFirstJni.h
4.在项目中新建文件夹jni,将.h文件拷贝到其下,添加一个同名的.c文件。将.h中的函数拷贝到.c中添加函数的参数。如下。
#include <string.h>#include <jni.h>JNIEXPORT jint JNICALL Java_com_will_myfirstjni_MyFirstJni_intFromJNI(JNIEnv *k, jclass j){return (jint)100000;}
5.到ndk目录sample\hello-jni\jni目录下复制Android.mk文件到工程的jni目录。
主要修改如下两行代码:
LOCAL_MODULE := MyFirstJNILOCAL_SRC_FILES := com_will_myfirstjni_MyFirstJni.c
LOCAL_MODULE--项目名
LOCAL_SRC_FILES--c文件名
6.在cygwin中跳到jni目录,输入$NDK/ndk-build命令,进行编译,此时会生成libs\armeabi\libMyFirstJNI.so文件。如果没有看到,右键refresh一下。
- Android调用so文件(C代码库)方法详解
- Android调用so文件(C代码库)方法详解
- Android调用so文件(C代码库)方法详解
- Android调用so文件(C代码库)方法详解
- [转]Android调用so文件(C代码库)方法详解
- Android 下调用so库文件的方法
- android中用ndk编译c代码为so库,供jni调用(一)
- Android Studio--NDK编译C代码为.so文件,JNI调用
- Android Studio--NDK编译C代码为.so文件,JNI调用
- android studio中使用ndk编译.so文件,调用C/C++代码(jni编程)
- Android Studio 添加C库so文件方法(NDK开发)
- Android使用已有C/C++代码、第三方SO库的方法(JIN学习)
- python调用so的库文件方法
- Java框架JNA调用C方法(windows链接库dll文件、linux链接库so文件)
- android使用C/C++调用SO库
- android使用C/C++调用SO库
- Android------使用C/C++调用SO库
- android使用C/C++调用SO库
- 一个合格的程序员应该读过哪些书
- 加密算法之BLOWFISH算法
- Android 类似IPhone图片点击效果实现,点击logo变暗
- 经济学人:科技业四巨头上演“权力的游戏”
- Android MediaPlayer状态图明晰注释
- Android调用so文件(C代码库)方法详解
- 线段树
- 怎样评判SEO的工作好坏标准
- uboot之start.s分析
- Java 分页功能
- Makefile批处理
- 跑动的区域
- eclipse提示框的背景颜色设置
- fopen 提前 EOF