NDK的基础教程 一 最简单的NDK使用

来源:互联网 发布:php 获取useragent 编辑:程序博客网 时间:2024/05/29 07:57

首先说明我使用的是Android Studio
开始我们需要配置NDK的环境,然后才能使用NDK,步骤如下
1 . 下载和安装NDK
地址:https://developer.android.google.cn/ndk/downloads/index.html
2 . 点菜单栏的File->ProjectStructure…->在打开的窗口中左侧选中SDKLocation->在右侧Android NDK Location中填入NDK目录所在路径
3 . 新建工程
4 . 在app模块的build.gradle文件里添加代码,就是ndk那块

android {    compileSdkVersion 23    buildToolsVersion "26.0.0"    defaultConfig {        applicationId "android.com.myapplication"        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionName "1.0"        ndk {            moduleName"myNativeLib"            ldLibs "log", "z", "m"            abiFilters "armeabi", "armeabi-v7a", "x86"        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}

5 . 在gradle.properties文件里添加代码
android.useDeprecatedNdk=true

6 . 在local.properties文件里添加代码
ndk.dir=F:\NDK\android-ndk-r13

7 . 在java里直接写出调用c语言的代码

8.  public class MainActivity extends AppCompatActivity{    static {        System.loadLibrary("myNativeLib");    }    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv = (TextView)findViewById(R.id.tv);        tv.setText(getStringFromNative() + "");    }    public native String getStringFromNative();}

8 . 通过terminal使用cd命令到达本工程的src/main/java目录下输入
javah -d ../jni 你的包名.引用本地方法的类的名称
比如:

C:\Users\Administrator\AndroidStudioProjects\MyApplication5>cd appC:\Users\Administrator\AndroidStudioProjects\MyApplication5\app>cd srcC:\Users\Administrator\AndroidStudioProjects\MyApplication5\app\src>cd mainC:\Users\Administrator\AndroidStudioProjects\MyApplication5\app\src\main>cd javaC:\Users\Administrator\AndroidStudioProjects\MyApplication5\app\src\main\java>javah -d ../jni android.com.myapplication.MainActivity

9 . 这样main下面会出现一个jni文件夹且里面还有一个名字很长的h文件,然后我们随便写一个cpp文件,然后输入代码,它会自动出现与之对应的h文件
比如:

//// Created by Administrator on 2017/8/4.//#include "main.h"#include <jni.h>#include <android/log.h>#ifndef LOG_TAG#define LOG_TAG"ANDROID_LAB"#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)#endif/* Header for class lab_sodino_jnitest_MainActivity */#ifndef _Included_android_com_myapplication_MainActivity#define _Included_adroid_com_ndk_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class:lab_sodino_jnitest_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_android_com_myapplication_MainActivity_getStringFromNative        (JNIEnv *env, jobject jObj){    LOGE("log string from ndk.");    return env->NewStringUTF("HelloFrom JNI!");}#ifdef __cplusplus}#endif#endif

10 . 编译运行在手机上看效果

结束了,以后我还会继续写这个NDK教程,但是对于一些文件配置我不会写第二遍,到时候我直接贴这个博文的链接。
下一次写一下关于java语言调用不同种类的c语言函数