Android NDK初次学习
来源:互联网 发布:mac 涂鸦软件 编辑:程序博客网 时间:2024/06/07 01:59
最近博主开始学习如何使用NDK,在此进行一下总结。
博主的IDE为Android Studio 2.3.1,接下来博主将演示如何在现有的项目上支持NDK。
下载NDK
首先,使用SDK Manager下载SDK Tools调试工具LLDB、编译工具CMake以及NDK:
NDK也可以去官网进行下载:NDK下载地址
编写java文件
首先,我们编写一个Native工具类,里面定义了一个native方法获取字符串:
public class NativeUtils { public static native String getNativeString(String str); }
然后在我们的主界面打印这个字符串:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.tv); tv.setText(NativeUtils.getNativeString("Java world")); }}
接着我们在app根目录下创建一个jni文件夹:
创建完成后,我们多了一个cpp的文件夹(实际上是jni文件夹,Android视图进行了简化):
然后我们Make Project,使其Java代码生成.class文件,并打开终端:
定位到生成.class文件的目录下:
cd app\build\intermediates\classes\debug
使用java命令的jni框架生成.h文件:
javah -jni 完整包名.类名
然后使用project 视图找到我们的.h文件:
把生成的.h文件剪贴到我们的jni文件夹中新建的include目录下:
链接到Gradle
首先我们需要在工程的Project Structure 下设置NDK 的目录:
在local.properties文件中添加ndk.dir属性亦可达到同样效果:
然后我们在cpp文件夹下创建空白的NativeUtils.cpp文件
接着打开Project视图,在工程的根目录下新建CMakeLists.txt 文件:
# Sets the minimum version of CMake required to build your native library.# This ensures that a certain set of CMake features is available to# your build.cmake_minimum_required(VERSION 3.4.1)# Specifies a library name, specifies whether the library is STATIC or# SHARED, and provides relative paths to the source code. You can# define multiple libraries by adding multiple add.library() commands,# and CMake builds them for you. When you build your app, Gradle# automatically packages shared libraries with your APK.add_library( # Specifies the name of the library. # so动态链接库文件名 NativeUtils # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). # cpp文件名 app/src/main/jni/NativeUtils.cpp )# Specifies a path to native header files.# .h头文件位置include_directories(app/src/main/jni/)
在Android视图中,选择我们的cpp文件夹,选择链接到Gradle:
选择CMake编译系统,并选择我们的CMakeLists.txt:
我们也可以通过在app模块的build.gradle的android的属性添加一下代码达到相同的效果:
externalNativeBuild { cmake { path '../CMakeLists.txt' } }
进行Gradle sync 同步过后,我们可以开始进行cpp代码编写了。
编写cpp文件
首先我们编写NativeUtils.cpp 文件,实现具体的Native方法:
#include <iostream>#include "com_app_superxlcr_myndktest_NativeUtils.h"using namespace std;/* * Class: com_app_superxlcr_myndktest_NativeUtils * Method: getNativeString * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_app_superxlcr_myndktest_NativeUtils_getNativeString (JNIEnv * env, jclass clz, jstring str) { // 获取Java层传来的字符串 jboolean* isCopy; const char* nativeChars = env->GetStringUTFChars(str, isCopy); // 构造返回字符串 string nativeStr = "Native world get Message :"; nativeStr.append(nativeChars); // 释放Java字符串资源 env->ReleaseStringUTFChars(str, nativeChars); // 返回结果 return env->NewStringUTF(nativeStr.c_str()); }
然后我们在NativeUtils.java 文件中添加如下代码载入动态链接库:
static { System.loadLibrary("NativeUtils"); }
编译运行的效果如下:
更多关于NDK的信息请参考官方的链接:https://developer.android.com/ndk/index.html#Revisions
0 0
- Android NDK初次学习
- Jni+Ndk初次开发
- 【Android NDK】Android NDK学习-详解!
- Android NDK 学习笔记
- Android NDK学习笔记
- Android NDK开发学习
- Android NDK学习笔记
- android ndk 学习
- Android NDK 学习小结
- 【android学习】NDK安装
- android NDK 学习
- android NDK的学习
- Android NDK学习记录
- android ndk 学习网址
- Android NDK学习笔记
- Android NDK 学习笔记
- Android NDK开发学习
- Android NDK 学习
- 《近匠》专访AbleCloud CTO孙志东——物联网云解决方案实践
- VB.Net WebBrowser如何取得鼠标点击位置的标签
- 模拟数据库增删查改功能
- 几种Java常用的通信协议比较
- iOS将一个viewcontroller的view加到self.view上
- Android NDK初次学习
- C# winform socket一个服务端和多个客户端进行通信
- C#自定义事件及使用(新手易懂)
- Mybatis的mapper标签 namespace属性说明
- 阿里云 oss服务器文件上传 java
- Tomcat8.0配置
- spring3详解及整合struts2
- 验证出错,错误码:230,请AndroidManifest.xml文件中检查 kye 设置
- R语言向量_向量化的ifelse()函数