Android Studio NDK及so文件开发 以及常见错误
2016-09-21 19:53
549 查看
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := demo LOCAL_SRC_FILES := demo.cpp include $(BUILD_SHARED_LIBRARY)
android中用到的so文件是一个c/c++的函数库。在android的JNI中,要先将相应的C语言打包成so库,然后导入到lib文件夹中供java调用。
概览:
一、Android Studio NDK配置
二、so库开发
三、调用so借口,实现借口输出
四、遇到问题
一、Android Studio NDK配置
1、进入Android studio --> 创建工程-->右键当前工程 => Open Moudle Setting => Android SDK location -->配置Android NDK location
2、配置环境变量
找到安装的ndk-bundle路径配置系统环境变量,如我的在D:\Android\AndroidSDK\ndk-bundle可以在系统环境变量中配置PATH=...;D:\Android\AndroidSDK\ndk-bundle 打开CMD窗口,若已经打开需要重新打开。
如下表示已经成功配置:
C:\Users\Administrator>ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
D:\Android\AndroidSDK\ndk-bundle\build\\..\build\core\build-local.mk:151: *** An
droid NDK: Aborting . Stop.
二、创建so文件
工程目录建立需要调用native函数的.java文件,如下:
package clove.hellojni; public class HelloJIN { static { System.loadLibrary("demo"); } public native String helloJNI(); }进入类文件位置目录:javac编译HelloJIN.java,生成HelloJIN.class
进入包目录前已经目录:javah -jni 包名.类名
生成c/c++依赖的.h文件xx_nn.h
app目录新建jni目录:jni目录下新建.c/.cpp文件,实现native借口,如demo.cpp
#include <jni.h> #include <stdio.h> #include "D:\AndroidStudioProjects\HelloJNI\app\src\main\java\clove_hellojni_HelloJIN.h" JNIEXPORT jstring JNICALL Java_clove_hellojni_HelloJIN_helloJNI(JNIEnv *env, jobject thiz){ return env->NewStringUTF((char *)"Hello from JNI !"); }jni目录建立编译文件Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := demo LOCAL_SRC_FILES := demo.cpp include $(BUILD_SHARED_LIBRARY)注意实现native借口文件为.c是需要LOCAL_SRC_FILES := demo.cpp改为LOCAL_SRC_FILES := demo.c
进入app目录:命令ndk-build进行编译.so文件,编译完成后生成libdemo.so文件在libs目录下。
三、调用so接口:
在app的build.gradle的android节点下设置:sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
在调用native接口java文件实现:
<pre name="code" class="java">package clove.hellojni; /** * Created by clove.xie on 2016/9/10. */ public class HelloJIN { static { System.loadLibrary("demo"); } public native String helloJNI(); }
注意在实现native接口是c/cpp的区别,
四、注意问题:
error: base operand of '->' has non-pointer type '_JNIEnv'
调用的代码这么来写://return (*env)->NewStringUTF(env, "Hello from JNI !");//如果是用C语言格式就用这种方式
//return env->NewStringUTF((char *)"Hello from JNI !");//C++用这种格式
相关文章推荐
- android studio NDK开发配置以及生成SO文件
- NDK &JNIAndroid Studio开发与调试DEMO(三)(生成 .so 文件)
- Android Studio NDK 开发与调试(生成 .so 文件)
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发
- Android NDK开发(三)——常见错误集锦以及LOG使用,androidndk
- Android Studio NDK及so文件开发范例
- Android Studio NDK及so文件开发
- Android Studio NDK及so文件开发(二)
- 【转载】Android Studio NDK 开发与调试(生成 .so 文件)
- Android Studio NDK及so文件开发
- Android Studio NDK CMake 指定so输出路径以及生成多个so的案例与总结 # 设置so文件生成路径 # set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $
- Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)
- Android开发常见低级错误之一:.xml文件命名
- JNI开发的常见错误&&Android.mk文件说明&& jni开发的简便流程
- Android开发:Android studio 无法在可视化页面预览XML布局文件以及丢失R文件
- Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法
- android studio 编译NDK android studio 生成.so文件