android ndk 環境搭建和簡單實例

先介紹下個人軟件環境java

android studio 1.5android

ndk r10e,c++

gradle-experimental:0.6.0-beta5 (top-level build.gradle)api

gradle-2.10-all.zip(gradle/wrapper/gradle-wrapper.properties)app

 

app.gradle,紅色字體爲修改部分ide

apply plugin: 'com.android.model.application'

model{
    android {
        compileSdkVersion=23
        buildToolsVersion="23.0.1"

        defaultConfig {
            applicationId "com.example.user.myapplication"
            minSdkVersion.apiLevel 14
            targetSdkVersion.apiLevel 23
            versionCode 1
            versionName "1.0"
        }

        ndk { moduleName "HelloNDK" }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles.add(file("proguard-rules.pro"))
            }
        }

        // Configures source set directory.
        sources { main { java { source { srcDir "src" } } } }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.1.1'
}

還須要在local.properties文件中設置ndk路徑,以下,具體路徑根據你安裝的ndk路徑而定測試

ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Ndk\\android-ndk-r10e
sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk

也能夠右鍵項目名稱,選擇open modules setting(F4),而後選擇SDK Location項,而後設置android NDK Location項的值,效果是同樣的。字體

而後main右鍵——New——folder——JNI Folder添加jni文件夾,全部.c/.c++文件都應該放到此處.當前版本的NDK有bug,因此須要先在這個文件夾內生產一個空的c文件,gradle

jni文件夾右鍵——New——C/C++ Source File——Name欄能夠任意輸入,type欄選擇文件類型,而後ok確認以後自動生成.c和.h文件,不須要改動內容.ui

至此環境已經搭建完成。

 

而後是測試例子,這裏在MainActivity中測試

public class MainActivity extends AppCompatActivity {

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText(this.get());
    }

    public native String get();

    public native void set(String str);
}

onCreate就是用一個文本框來顯示從C方法裏面返回的值。關鍵點在紅色字體部分,其中System.loadLibrary("HelloNDK")是用來加載C庫,public native String get();public native void set(String str);兩個方法則是聲明C庫裏面有這2個方法.固然如今jni文件夾裏面並無HelloNDK.c這個文件,因此會提示錯誤,這時只要選中方法名,而後alt+enter,而後選擇Create funcation XXX,就會在jni文件夾中自動生成HelloNDK.c文件,該文件裏面會自動生成符合jni規則的對應C方法,而後只須要實現該方法體,就完成了簡單的ndk實例.

HelloNDK.c文件內容以下,紅色字體爲手動修改部分,其他部分均爲自動生成

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_main_java_com_sunyang_ndkapplication_MainActivity_get(JNIEnv *env, jobject instance) {

    // TODO


    return (*env)->NewStringUTF(env, "hello ndk");
}

JNIEXPORT void JNICALL
Java_main_java_com_sunyang_ndkapplication_MainActivity_set(JNIEnv *env, jobject instance,
                                                           jstring str_) {
    const char *str = (*env)->GetStringUTFChars(env, str_, 0);

    // TODO

    (*env)->ReleaseStringUTFChars(env, str_, str);
}

 

完成以後運行,手機界面上的TextView應該會顯示hello ndk.

至此環境搭建和實例測試結束從使用體驗上來看,使用NDK來調用jni十分簡單,開發時只須要把精力集中在代碼邏輯上,不用去作繁瑣的設置。期待正式版本的到來.

相關文章
相關標籤/搜索