ubuntu下的android studio jni生成c++动态库的调用方法及排错(ndk生成的动态库调用)
来源:互联网 发布:1×1矩阵的值怎么求 编辑:程序博客网 时间:2024/05/21 16:18
2、新建一个java类。
public class TestJni{
public native int add(int x,int y);
}
之后编译工程。在app/build/intermediates/classes/debug/工程包名/xxx 下会生成一个TestJni.class。然后编译该TestJni.class.回到debug目录下。进入终端输入javah 工程包名.xxx,
在debug目录下生成jni的头文件;格式如下:
JNIEXPORT jint JINCALL Java_包名_TestJni_add(JNIEnv *,object,hint,jint);
将头文件复制到jni目录下,并建立一个cpp源文件。源文件实现功能:
JNIEXPORT jint JINCALL Java_包名_TestJni_add(JNIEnv *ENV,object obj,jint x,jint y)
{
return x+y;
}
在jni下建立Android.mk,属于android下的makefile文件。进行idk编译生成需要的动态库.实现如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestJni
LOCAL_SRC_FILES := 源文件
include $(BUILD_SHARED_LIBRARY)
完成后,进入到jni目录下.输入ndk-build。可能会生成动态库失败,原因可能如下:
(1)没有设置ndk路径,可以在sudo edit ~/.bashrc 中设置。
export NDK_HOME=/xxx/xxx/xxx/android-ndk-r10d
export PATH=$NDK_HOME:$PATH
(2)可在as工程下的,local.properties中,设置ndk.dir=/xxx/xxx/xxx/android-ndk-r10d
配置完成后编译产生的错误,Execution failed for task”:app:compileDebugNdk”.会提醒你在grade.properties中加入
android.useDeprecatedNdk=true.生成动态库成功,在libs/armeabi下。
可能因为手机cpu型号的不同需要建立其它文件夹 armeabi-v7a、x86i 将生成的动态库拷贝到目录下。
在MainActivity调用该动态库
public class MainActivity extends Activity{
static{
System.loadLibrary(“TestJni”);
}
protected void onCreated(Bundle saveInstanceState)
{
super.onCreated(saveInstanceState);
TestJni jni = new TestJni();
int value jni->add(10,10);
}
}
转:
NDK 编译和使用静态库、动态库
情况一:编译静态库
情况二:编译动态库
情况三:编译动态库+静态库
情况四:已有第三方静态库(动态库),编译静态库(动态库)
默认所有代码和文件在$project/jni下,否则特殊说明。
情况一:编译静态库
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_STATIC_LIBRARY)
文件Application.mk:
APP_MODULES :=hello-jni
情况二:编译动态库
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
情况三:编译动态库+静态库
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib_static
LOCAL_SRC_FILES := src.c
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib_shared
LOCAL_SRC_FILES := src2.c
LOCAL_STATIC_LIBRARIES := mylib_static
include $(BUILD_SHARED_LIBRARY)
情况四:已有第三方静态库(动态库),编译静态库(动态库)
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := thirdlib1 # name it whatever
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libthird1.a # or $(so_path)/libthird1.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY) #or PREBUILT_SHARED_LIBRARY
include $(CLEAR_VARS)
LOCAL_MODULE := mylib_use_thirdlib
LOCAL_SRC_FILES := src.c
LOCAL_STATIC_LIBRARIES := thirdlib1 #or LOCAL_SHARED_LIBRARY
include $(BUILD_SHARED_LIBRARY) #如果编译静态库,需要Application.mk
http://www.jianshu.com/p/d8cde65cb4f7
- ubuntu下的android studio jni生成c++动态库的调用方法及排错(ndk生成的动态库调用)
- Android studio下的Android JNI调用以及动态链接库.so的生成
- [android ndk]android studio动态库生成及jni底层调用步骤
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- C++调用C生成的动态库
- linux下C的动态库生成和调用
- OpenCV图像处理动态库的生成与jni调用
- Android Studio下的NDK开发(四):调用动态链接库中的函数
- Linux下动态库的生成及链接方法 ---傻瓜式调用啊
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- Eclipse CDT MinGW生成C++动态链接库及Java JNI的调用例子
- java调用C/C++生成的dll动态链接库----借助JNI
- 【OCR】ndk编译tesseract3.05生成Android可以调用的.so动态库
- android studio下,如何减少编译生成的jni动态库的大小。
- Android-ndk 调用现有的动态库
- NDK动态库的调用
- NDK动态库的调用
- sqoop把mysql导入hive时报错:Could not load org.apache.hadoop.hive.conf.HiveConf.
- java对接mysql数据库
- nohup 和 &
- makefile 编译可执行文件
- Android Annotation框架初步实践
- ubuntu下的android studio jni生成c++动态库的调用方法及排错(ndk生成的动态库调用)
- 嵌入式系统中的目标识别技术
- QT4.84The GDB process crashed
- centos系统下mysql安装部署及用户管理
- Asp中Linq怎么取得表中某列的最大值
- 【CG物理模拟系列】弹性体模拟--Mass Spring及绳子模拟
- 自己绘制的可点击,可滑动,可动态添加的柱状图
- java 防止同一IP多次请求攻击
- Struts默认存储request,转化session存储的三中方式案例