android Ndk学习笔记01之Hello World!
官方参考链接
1.为什么使用NDK
1.代码保护:由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2.效率高:大部分现存的开源库都是用C/C++代码编写的。
3.便于移植:用C/C++写得库可以方便在其他的嵌入式平台上再次使用。
2.配置环境
工具:android studio
使用android studio开发JIN特别简单,只要把红色区域勾选上就可以了。
2.创建NDK项目
第一步
点击File-->New-->New Project,出现下图;
创建包含C++的项目⚠️一定要勾选Include C++ support
第二步
点击next,选择版本,
继续next,添加Activity类型,
继续next,创建Activity以及布局文件,
最后,到如下页面:
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中的路径也要随之更改。
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- 加快Android离线文档的访问速度
- eclipse工具使用技巧&关联Android源码
- Android(安卓)NDK入门实例 计算斐波那契数列二生成.so库文件
- Android(安卓)Project : FXiami 虾米音乐播放器
- 把第三方jar库加入android framework services
- Android(安卓)SVG动画PathView源码解析与使用教程(API 14)
- 【Android(安卓)开发教程】FrameLayout帧布局