Android studio NDK-JNI HelloJNI

上一篇文章教了一些你們配置生成so .h 等方法。這邊就來說下如何寫一個HelloJNI的項目工程,java

開始了。 在AS中新建一個Project,而後再新建一個class文件HelloJNI,在內部聲明native方法(jni使用的定義)。android

public class HelloJNI {
        public native String getClanguageString();

    static {
        System.loadLibrary("hellojni");
    }
}

在工程的文件入口Activity寫下以下代碼app

public class MainActivity extends AppCompatActivity {
    private TextView mTextview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextview = (TextView)findViewById(R.id.textView);
        HelloJNI helloJni = new HelloJNI(); //建立helloJni對象
        mTextview.setText(helloJni.getClanguageString());//調用getClanguageString()方法
    }
}

這裏須要一個比較重要的步驟(這裏須要先將project build一下) 接下來使用咱們上篇的教程選中工程裏面HelloJNI文件右鍵, 輸入圖片說明找到以下菜單,選擇NDK-->javah方法。 而後咱們就會看先在main目錄下面生了一個新的目錄。--> jni <--對這個就咱們須要的目錄裏面天然也生成了響應的.h文件,掌聲在哪裏。 打開文件.h 查看內容以下eclipse

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_org_text_HelloJNI */

#ifndef _Included_com_org_text_HelloJNI
#define _Included_com_org_text_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_org_text_HelloJNI
 * Method:    getClanguageString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_org_text_HelloJNI_getClanguageString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

.h文件生成完畢以後,咱們須要寫對應的c或者cpp文件,也就是是C/C++文件,在jni目錄下面咱們在建立一個文件helloJni.c的文件 內容以下ide

//
// Created by 許健 on 16/8/24.
//

#include "com_org_text_HelloJNI.h"

JNIEXPORT jstring JNICALL Java_com_org_text_HelloJNI_getClanguageString
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"HelloWorld!");
}

文件寫好以後 須要在工程的找到local.properties文件中添加NDK路徑(以前下載好的) 添加在sdk後面就好gradle

sdk.dir=/Users/xujian/Documents/Android_eclipse/android_DEV/sdk
ndk.dir=/Users/xujian/Documents/Android_eclipse/android_DEV/android-ndk-r10

在找到gradle.properties文件添加ui

android.useDeprecatedNdk=true

接下來在app module目錄下的build.gradle中設置庫文件名(生成的so文件名)。找到gradle文件的defaultConfig這項,在裏面添加以下內容:code

defaultConfig {
    ......
     //定義使用ndk
        ndk{
            moduleName "hellojni"         //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。目前無關緊要。
        }
}

接下來就是編譯工程運行就能夠了。 運行結果對象

相關文章
相關標籤/搜索