Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android studio下ndk開發

android studio下ndk開發

編輯:關於Android編程

新建項目

使用向導新建一個android studio項目

新建一個Test類

package cn.edu.zafu.jnidemo;

public class Test {
    static {
        System.loadLibrary("Test");
    }
    public native String getName();
}

make project

build->make project

生成頭文件

在as裡打開終端,進入main目錄生成頭文件

cd app/src/main
javah -d jni -classpath "D:\Program Files\adt-bundle-windows-x64-20140702\sdk\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug" cn.edu.zafu.jnidemo.Test

目錄中有空格,請使用雙引號包含

之後再jni目錄裡會有頭文件生成,復制一份改後綴為.c,裡面實現的內容如下

#include 
JNIEXPORT jstring JNICALL Java_cn_edu_zafu_jnidemo_Test_getName(JNIEnv * env, jobject jObj){
        jstring str = (*env)->NewStringUTF(env, "HelloWorld from JNI !");
        return str;
}

在jni目錄下新建一個util.c(其他任意名也可),內容為空,否則會報一個錯

配置ndk目錄

打開local.properties,加入ndk目錄

sdk.dir=D\:\\Program Files\\adt-bundle-windows-x64-20140702\\sdk
ndk.dir=D\:\\android-ndk-r10b

配置build.gradle

打開該文件,在defaultConfig 中增加ndk的配置

defaultConfig {
        ndk {
            moduleName "Test"
        }
    }

再增加以下配置

 productFlavors {
        x86 {
            versionCode Integer.parseInt("6" + defaultConfig.versionCode)
            ndk {
                abiFilter "x86"
            }
        }
        mips {
            versionCode Integer.parseInt("4" + defaultConfig.versionCode)
            ndk {
                abiFilter "mips"
            }
        }
        armv7 {
            versionCode Integer.parseInt("2" + defaultConfig.versionCode)
            ndk {
                abiFilter "armeabi-v7a"
            }
        }
        arm {
            versionCode Integer.parseInt("1" + defaultConfig.versionCode)
            ndk {
                abiFilters "armeabi", "armeabi-v7a"
            }
        }
        fat
    }

重新編譯即可

調用

package cn.edu.zafu.jnidemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Test t=new Test();
        Toast.makeText(this,t.getName(),Toast.LENGTH_LONG).show();
    }


}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved