Android studio2.2 NDK,JNI的简单使用
2017-01-12 15:07
627 查看
今天聊聊Android studio 2.2 添加C 和C++ 的代码
- Android 原生开发工具包 (NDK):这套工具集允许您为 Android 使用 C 和 C++ 代码,并提供众多平台库,让您可以管理原生 Activity 和访问物理设备组件,例如传感器和触摸输入。
- CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
- LLDB:一种调试程序,Android Studio 使用它来调试原生代码。
这三个工具是必须装的缺一不可。LLDB调试的, CMake编译的, NDK是api
您可以使用 SDK 管理器安装这些组件:
在打开的项目中,从菜单栏选择 Tools > Android > SDK Manager。
点击 SDK Tools 标签。
选中 LLDB、CMake 和 NDK 旁的复选框,如图 1 所示。
中间几个步骤我就不贴图了,跟正常选择是一样的,关键就是这两个选择
Exceptions Support:如果您希望启用对 C++ 异常处理的支持,请选中此复选框。如果启用此复选框,Android Studio 会将 -fexceptions 标志添加到模块级 build.gradle 文件的 cppFlags 中,Gradle 会将其传递到 CMake。
Runtime Type Information Support:如果您希望支持 RTTI,请选中此复选框。如果启用此复选框,Android Studio 会将 -frtti 标志添加到模块级 build.gradle 文件的 cppFlags 中,Gradle 会将其传递到 CMake。
在 cpp 组中,您可以找到属于项目的所有原生源文件、标头和预构建库。对于新项目,Android Studio 会创建一个示例 C++ 源文件 native-lib.cpp,并将其置于应用模块的 src/main/cpp/ 目录中。本示例代码提供了一个简单的 C++ 函数 stringFromJNI(),此函数可以返回字符串“Hello from C++”。要了解如何向项目添加其他源文件,请参阅介绍如何创建新的原生源文件的部分。
在 External Build Files 组中,您可以找到 CMake 或 ndk-build 的构建脚本。与 build.gradle 文件指示 Gradle 如何构建应用一样,CMake 和 ndk-build 需要一个构建脚本来了解如何构建您的原生库。对于新项目,Android Studio 会创建一个 CMake 构建脚本 CMakeLists.txt,并将其置于模块的根目录中。要详细了解此构建脚本的内容,请参阅介绍如何创建 Cmake 构建脚本的部分。
native-lib代码:
原文:https://developer.android.com/studio/projects/add-native-code.html#download-ndk
1.下载NDK和构建工具
要为您的应用编译和调试原生代码,您需要以下组件:- Android 原生开发工具包 (NDK):这套工具集允许您为 Android 使用 C 和 C++ 代码,并提供众多平台库,让您可以管理原生 Activity 和访问物理设备组件,例如传感器和触摸输入。
- CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
- LLDB:一种调试程序,Android Studio 使用它来调试原生代码。
这三个工具是必须装的缺一不可。LLDB调试的, CMake编译的, NDK是api
您可以使用 SDK 管理器安装这些组件:
在打开的项目中,从菜单栏选择 Tools > Android > SDK Manager。
点击 SDK Tools 标签。
选中 LLDB、CMake 和 NDK 旁的复选框,如图 1 所示。
2.创建项目看下图:
中间几个步骤我就不贴图了,跟正常选择是一样的,关键就是这两个选择
在向导的 Customize C++ Support 部分,您可以使用下列选项自定义项目:
C++ Standard:使用下拉列表选择您希望使用哪种 C++ 标准。选择 Toolchain Default 会使用默认的 CMake 设置。Exceptions Support:如果您希望启用对 C++ 异常处理的支持,请选中此复选框。如果启用此复选框,Android Studio 会将 -fexceptions 标志添加到模块级 build.gradle 文件的 cppFlags 中,Gradle 会将其传递到 CMake。
Runtime Type Information Support:如果您希望支持 RTTI,请选中此复选框。如果启用此复选框,Android Studio 会将 -frtti 标志添加到模块级 build.gradle 文件的 cppFlags 中,Gradle 会将其传递到 CMake。
在 cpp 组中,您可以找到属于项目的所有原生源文件、标头和预构建库。对于新项目,Android Studio 会创建一个示例 C++ 源文件 native-lib.cpp,并将其置于应用模块的 src/main/cpp/ 目录中。本示例代码提供了一个简单的 C++ 函数 stringFromJNI(),此函数可以返回字符串“Hello from C++”。要了解如何向项目添加其他源文件,请参阅介绍如何创建新的原生源文件的部分。
在 External Build Files 组中,您可以找到 CMake 或 ndk-build 的构建脚本。与 build.gradle 文件指示 Gradle 如何构建应用一样,CMake 和 ndk-build 需要一个构建脚本来了解如何构建您的原生库。对于新项目,Android Studio 会创建一个 CMake 构建脚本 CMakeLists.txt,并将其置于模块的根目录中。要详细了解此构建脚本的内容,请参阅介绍如何创建 Cmake 构建脚本的部分。
3.开始编译
1.点击Build -> Build APK ,会生成一个APK,如下图请自行浏览:4.看代码
MainActivity.class代码:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); // Example of a call to a native method TextView tv = (TextView) findViewById(R.id.sample_text); tv.setText(stringFromJNI()); } /** * A native method that is implemented by the 'native-lib' native library, * which is packaged with this application. */ public native String stringFromJNI(); //有点像JAVA声明一个方法一样 // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); //加载这个文件的包名 } }
native-lib代码:
#include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_test_ndktest1_MainActivity_stringFromJNI( //该方法于public native String stringFromJNI()是相对应的 JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); }
原文:https://developer.android.com/studio/projects/add-native-code.html#download-ndk
相关文章推荐
- Android之Cookie在开发中应用
- android_74_写联系人
- 仿京东收货地址
- 万能的recyclerview分割线(线性,表格,瀑布流)
- Android中LocalSocket使用
- 将软键盘变成搜索
- Android中JNI编程的那些事儿
- 如何使用Design Support Library提供的FloatingActionButton
- Android中常见的三种异常
- android butterknife注解绑定后发生nullexception
- Android 性能优化——内存篇
- Android使用开源框架Fresco处理图片
- Android studio,使用greenDao第三方数据库框架操作数据库(二)(升级管理,自定义数据库路径,数据库升级操作)
- Android系统:如何在小部件列表中隐藏某个widget或者shortcut?
- Toolbar Support 包 24 以上边距留白问题
- android samsung 刷机
- Android中<xliff:g>标签的使用
- android自定义View基础系列一(模仿360手机卫士手机提速动画)
- Android基础总结
- Android 多进程注意事项