Ubuntu + Android Studio NDK环境的搭建

来源:互联网 发布:网络直播跟风现象 编辑:程序博客网 时间:2024/04/28 19:29

简单介绍下Android NDK环境的搭建,最好已经配置了科学上网,这样使用Android Studio的自动更新比较方便。

配置NDK

使用Android Studio下载NDK,也可以使用的SDK Manager 进行下载,并配置环境变量

检测环境变量

ndk-which gcc

配置成功时
这里写图片描述

配置Gradle

gradle插件不支持NDK(当然用它也可以进行NDK开发,就是非常不方便),我们需要使用gradle-experimental插件。gradle-experimental插件使用的时候与gradle插件稍微有点区别。

Project Gradle 配置如下

改变Gradle版本

 dependencies {        classpath 'com.android.tools.build:gradle-experimental:0.7.0'    }

Module Gradle 配置

完整配置

apply plugin: 'com.android.model.application'model {    android {        compileSdkVersion = 23        buildToolsVersion = "23.0.2"        defaultConfig {            applicationId "com.example.yangtianrui.ndktest"            minSdkVersion.apiLevel 15            targetSdkVersion.apiLevel 23            versionCode 4            versionName "1.0.1"        }    }    android.ndk {        moduleName "yangtr"        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'}

注意

  • 首先在apply的时候我们引入的插件名称由’com.android.application’变成了’com.android.model.application’。

  • 其次,在原来android的外层加入了一个model层次。

  • 再次,原来在android的里面的块,除了defaultConfig外,全部移除android块放入model块中与android并列,并且前面的名字加上android.。

  • 然后,compileSdkVersion 23与 buildToolsVersion “23.0.2”改成 compileSdkVersion = 23和buildToolsVersion = “23.0.2”,中间加上了=。

  • 其次,添加上android.ndk块,块中的moduleName表示C/C++代码打包成so文件的名字。

  • 再次,android.buildTypes块中的proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’改成proguardFiles.add(file(“proguard-rules.txt”))。
    最后,注意dependencies块依然在最外层,它不在model块中。

 Java 调用

public class MainActivity extends AppCompatActivity {    private TextView mTvText;    static {        System.loadLibrary("yangtr");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTvText = (TextView) findViewById(R.id.id_tv_text);        mTvText.setText(getString());    }    // 此处为JNI 的方法    // 使用Alt + Enter自动创建JNI文件    public native String getString();}

C 文件的创建

使用这个插件后,C文件都是自动生成的

#include <jni.h>JNIEXPORT jstring JNICALLJava_com_example_yangtianrui_ndktest_MainActivity_getString(JNIEnv *env, jobject instance) {    return (*env)->NewStringUTF(env, "hello JNI");}

执行效果

这里写图片描述


参照SegmentFault整理
https://segmentfault.com/a/1190000005152343

0 0
原创粉丝点击