NDK的简单使用

来源:互联网 发布:剑三叽太捏脸数据 编辑:程序博客网 时间:2024/06/03 23:44

1,root gradle中配置radle-experimental插件

classpath 'com.android.tools.build:gradle-experimental:0.7.0'
2,app gradle中较多细节配置,这里就直接贴代码了

apply plugin: 'com.android.model.application'/*todo 首先在apply的时候我们引入的插件名称由'com.android.application'变成了'com.android.model.application'。todo  其次,在原来android的外层加入了一个model层次。todo  再次,原来在android的里面的块,除了defaultConfig外,全部移除android块放入model块中与android并列,并且前面的名字加上android.。todo  然后,compileSdkVersion 23与 buildToolsVersion "23.0.2"改成 compileSdkVersion = 23和buildToolsVersion = "23.0.2",中间加上了=。todo  其次,添加上android.ndk块,块中的moduleName表示C/C++代码打包成so文件的名字。todo  再次,android.buildTypes块中的proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'改成proguardFiles.add(file("proguard-rules.txt"))。todo  最后,注意dependencies块依然在最外层,它不在model块中。*/model{    android {        compileSdkVersion = 23        buildToolsVersion = "23.0.2"        defaultConfig {            applicationId "com.xinguang.ndkdemo"            minSdkVersion.apiLevel 15            targetSdkVersion.apiLevel 23            versionCode 4            versionName "1.0.1"        }    }    android.ndk {        moduleName "lavor"        ldLibs.addAll(['log'])        cppFlags.add("-std=c++11")        cppFlags.add("-fexceptions")        platformVersion 15        stl 'gnustl_shared'    }    android.buildTypes {        release {            minifyEnabled = false            proguardFiles.add(file("proguard-rules.txt"))        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:23.1.1'    compile 'com.android.support:recyclerview-v7:23.1.1'    compile 'com.android.support:design:23.1.1'}
3,在Android程序中添加一个native方法:

public native String getString();
4,根据提示生成对应的c方法

#include <jni.h>JNIEXPORT jstring JNICALLJava_com_xinguang_ndkdemo_MainActivity_getString(JNIEnv *env, jobject instance) {    // TODO    const char *returnValue ="this is test";    return (*env)->NewStringUTF(env, returnValue);}//todo 步骤二,生成一个与java目录同级的jni目录,在jni目录自动建立一个c文件,在c文件中实现刚才的native方法
5,在Android程序中添加上加载so库文件的代码(名称定义在appGradle->Model->android.ndk->moduleName下),so文件地址:app\build\intermediates\transforms\mergeJniLibs\debug\folders\2000\1f\main\lib\

6,然后贴一下整体代码
public class MainActivity extends AppCompatActivity {    //todo 步骤三:在Android程序中添加上加载so库文件的代码(名称定义在appGradle->Model->android.ndk->moduleName下)    //              todo so文件地址:app\build\intermediates\transforms\mergeJniLibs\debug\folders\2000\1f\main\lib\    static {        System.loadLibrary("lavor");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView text = (TextView) findViewById(R.id.text);        text.setText(getString());    }    //todo 步骤一:在Android程序中添加一个native方法    public native String getString();}

参考网址:https://segmentfault.com/a/1190000005152343
猛戳这里下载demo

原创粉丝点击