Ubuntu + Android Studio NDK环境的搭建

简单介绍下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 JNICALL
Java_com_example_yangtianrui_ndktest_MainActivity_getString(JNIEnv *env, jobject instance) {

    return (*env)->NewStringUTF(env, "hello JNI");
}
执行效果

这里写图片描述


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值