官方参考链接

1.为什么使用NDK

1.代码保护:由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2.效率高:大部分现存的开源库都是用C/C++代码编写的。
3.便于移植:用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

2.配置环境

工具:android studio
使用android studio开发JIN特别简单,只要把红色区域勾选上就可以了。

配置NDK环境

2.创建NDK项目

第一步

点击File-->New-->New Project,出现下图;

创建包含C++的项目

⚠️一定要勾选Include C++ support

第二步

点击next,选择版本,
继续next,添加Activity类型,
继续next,创建Activity以及布局文件,
最后,到如下页面:

C++设置页面

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。

⚠️课根据自己的需求,进行自定义配置。

点击Finish,项目创建完成。、

第四步

等待项目编译完成之后,直接运行Run ’app‘,你就看见Hello World啦,如图;


Hello from C++

2.代码分析

是不是很疑惑,一句代码都没有写,就完成了第一个NDK项目?那是我们的AS越来越强大了,只要添加了Include C++ support,AS会自动帮我们实现Hello World,是不是很给力呢。
现在,我们分析分析,用代码是怎么实现的吧。

  • HelloActivity
package com.android.ndkstudy.ui;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;import com.android.ndkstudy.R;public class HelloActivity extends AppCompatActivity {    // Used to load the 'native-lib' library on application startup.    // 1.导入NDK jar包,即平时使用的so文件    // 使用静态方法,保证在使用时前,架包已导入。    static {        System.loadLibrary("native-lib");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_hello);        // Example of a call to a native method        TextView tv = (TextView) findViewById(R.id.sample_text);        tv.setText(stringFromJNI());//3 直接使用native方法    }    /**     * A native method that is implemented by the 'native-lib' native library,     * which is packaged with this application.     * 2 直接使用so库中的方法,使用 native 关键字,即so的方法     */    public native String stringFromJNI();、}
  • native-lib.cpp
#include #include extern "C"JNIEXPORT jstringJNICALLJava_com_android_ndkstudy_ui_HelloActivity_stringFromJNI(//方法名,即包的路径,加上_方法名        JNIEnv *env,        jobject /* this */) {    std::string hello = "Hello from C++";//对字符串赋值    return env->NewStringUTF(hello.c_str());//返回数据}

参数简介:

  • JNIEnv :局部数据的指针,用于传递数据;
  • jobject:类引用,即当前对象
    备注:⚠️NDK开发中,包的路径是绝对路径,不应该随便更改,若更改java中的包路径,NDK中的路径也要随之更改。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  3. 加快Android离线文档的访问速度
  4. eclipse工具使用技巧&关联Android源码
  5. Android(安卓)NDK入门实例 计算斐波那契数列二生成.so库文件
  6. Android(安卓)Project : FXiami 虾米音乐播放器
  7. 把第三方jar库加入android framework services
  8. Android(安卓)SVG动画PathView源码解析与使用教程(API 14)
  9. 【Android(安卓)开发教程】FrameLayout帧布局

随机推荐

  1. 整理出15个Android很有用的代码片段(技巧
  2. Android去掉抽屉
  3. Myeclipse中搭建Android开发环境
  4. Android(安卓)常用开源库
  5. android系统目录解析
  6. Android必学-AsyncTask基础
  7. Android 创建与解析XML(二)—— Dom方式
  8. Android中Notification的简单使用
  9. android permission权限
  10. Android自定义字体