使用AS的NDK工具开发JNI
2017-06-15 18:17
260 查看
从集成NDK至AndroidStudio中到实现简单案例
Ctrl Alt Shift S快捷键打开如下窗口,点击Download Android NDK.
如下图,NDK会自动下载安装好
NDK下载好后配置下系统环境变量,方便编译.so库
如下可执行
ndk-build命令即可
在这里
ndk-build就是将 C/C++文件编译成 .so库的命令工具。当我们在没有 jni文件夹的地方运行该命令,就会出现如上的结果;正确的使用情景是在有 jni文件夹的地方使用该命令,并且 jni文件夹内拥有
Android.mk、Application.mk、xxx.cpp文件,其中前两个文件名是固定的,后面的 .cpp文件就是自己编写的 C/C++文件了
然后在项目的app/src/main下创建jniLibs目录,将生成好的 .so库置入其中
避坑动作
在项目的 gradle.properties文件中添加
Android.useDeprecatedNdk=true,不然
在 build.gradle文件中添加
sourceSets
android { ...... buildTypes { release { ...... } sourceSets { main { jni.srcDirs = [] } } } }
看看代码
在 Activity 中调用 .so库写好的方法
public class OneActivity extends AppCompatActivity { // 静态加载本地.so库 static { System.loadLibrary("jni-test"); } @BindView(R.id.tv_fromC) TextView tvFromC; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); ButterKnife.bind(this); // 将本地方法返回的字符串显示到页面 tvFromC.setText(getStr()); } // 声明本地方法 public native String getStr(); }
C/C++写好的本地方法
#include <jni.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif // 本地方法,注意命名规范:首字母大写_项目包名_所在Activity名_Java中声明的方法名 // env是JVM的指针,thiz是调用该方法的Java对象 jstring Java_cc_catface_helloworld_OneActivity_getStr(JNIEnv *env, jobject thiz) { // 返回字符串 return env->NewStringUTF("来自C++的问候"); } #ifdef __cplusplus } #endif
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := jni-test LOCAL_SRC_FILES := test.cpp include $(BUILD_SHARED_LIBRARY)
其中 LOCAL_MODULE 表示模块名称,LOCAL_SRC_FILES 表示需要编译的源文件
Application.mk
APP_ABI := armeabi
API_ABI 表示CPU的架构平台类型,主要平台类型有 armeabi、x86、mips。NDK默认会编译产生全平台 .so库,即
APP_ABI := all,但是我们可以指定仅产生某一平台的 .so库,因为大部分真机都是 armeabi 平台的嘛,注意使用模拟器时可能是 x86架构
最后本案例的运行结果如下
相关文章推荐
- AS2.2使用CMake方式进行JNI/NDK开发
- 使用as开发jni入门(附验证):配置ndk开发环境,配置as相关jni配置
- NDK工具使用,JNI开发
- AS2.2使用CMake方式进行JNI/NDK开发
- AS2.2使用CMake方式进行JNI/NDK开发
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- 使用Android Studio 1.3 版本进行NDK开发 编译运行hello-jni项目及分析
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- Android-使用C++实现调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(八)
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- ubuntu下jni的简单使用,不使用ndk工具
- 安装安卓开发工具NDK时出现 failed to load the jni shared library "E:\Program Files\java\jdk1.7.0_15\bin..\jre\bi
- 使用eclipse开发ndk之:导入现有的ndk工程(NDK例子-Hello-jni导入到eclipse)
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)
- android如何使用自己定义JNI接口,以及NDK环境建设和使用的工具。
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- 【基于Windows系统】教你如何在Android中使用JNI以及NDK开发环境搭建
- Android开发中使用NDK在Eclipse中实现JNI技术
- jni开发之配置ndk、Javap、javah命令工具