Android studio下使用 NDK 之 Hello world

来源:互联网 发布:手机延时软件 编辑:程序博客网 时间:2024/05/23 21:40

最后结果

2017-03-26 15-45-44屏幕截图

2017-03-26 15-46-31屏幕截图

目的:

1.学会如何使用Android studio创建一个native project

2.学会如何在Android studio下使用Java调用本地语言(C/C++)

1、首先创建一个普通的Project

一值next,直到最后

直接运行,是最开始的HelloWorld

2017-03-26 15-58-43屏幕截图

打开设置->Build,Execution,Deploym->Gradle

选择”Use Default Gradle wrapper (recommended)

2017-03-26 16-27-51屏幕截图

选择 “工具” > “Android” > “SDK Manager”

点击上面的SDK Tools

选择NDK,下载并安装

2017-03-26 16-28-56屏幕截图

2.修改Gradle

2017-03-26 16-06-46屏幕截图

首先,需要进入目录Gradle Scripts->build.gradle(Project)把

classpath 'com.android.tools.build:gradle:2.2.3'

改成

classpath 'com.android.tools.build:gradle-experimental:0.7.2'

现在还不能同步gradle,还需要进入gradle-wrapper.properties

2017-03-26 16-08-11屏幕截图

因为experimental:0.7.2对应的是gradle-2.10-all.zip,所以要把

distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip

改成

distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

接着打开build.gradle(app)

2017-03-26 16-10-06屏幕截图

填加一个model,把

android {    compileSdkVersion 25    buildToolsVersion "25.0.2"    defaultConfig {        applicationId "com.example.root.helloworldjni"        minSdkVersion 15        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}

改成

model{    android {        compileSdkVersion 25        buildToolsVersion "25.0.2"        defaultConfig {            applicationId "com.example.root.helloworldjni"            minSdkVersion.apiLevel 15            targetSdkVersion.apiLevel 25            versionCode 1            versionName "1.0"            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        }        buildTypes {            release {                minifyEnabled false                proguardFiles.add(file('proguard-android.txt'))            }        }    }}

其他不变

注意: 1.添加了model的一个嵌套

​ 2.minSdkVersion 15targetSdkVersion 25改成minSdkVersion.apiLevel 15targetSdkVersion.apiLevel 25

​ 3.proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 改成 proguardFiles.add(file('proguard-android.txt'))

最后记得把

apply plugin: 'com.android.application'

改为

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

然后点击2017-03-26 16-22-57屏幕截图同步gradle,就会同步成功了

3.开始写代码

打开”文件” > “Project Structure” > “SDK Location”, “Android NDK Location”

设置NDK路径

2017-03-26 16-33-19屏幕截图

打开”Gradle Scripts” > “build.gradle (Module:app)”, 填加ndk的moduleName在”model” 块中, 放在”buildTypes” 后面

buildTypes {...}// New codendk {    moduleName "hello-android-jni"}

然后在MainActivity中添加代码,把库加载进来,如下:

static{        System.loadLibrary("hello-android-jni");    }   ......public native String getMsgFromJNI();

然后点击2017-03-26 16-22-57屏幕截图同步gradle,并且点击2017-03-26 16-41-54屏幕截图重新build一下

这时候,会发现

  public native String getMsgFromJNI();

会报错

这时候,点击左边红色的灯

2017-03-26 16-43-30屏幕截图

会生成一个cpp目录下的c文件

2017-03-26 16-44-16屏幕截图

把代码修改为

#include <jni.h>JNIEXPORT jstring JNICALLJava_com_example_root_helloworldjni_MainActivity_getMsgFromJNI(JNIEnv *env, jobject instance) {    return (*env)->NewStringUTF(env, "Hello World Form JNI!");}

然后在修改MainActiviyt 的 onCreate中的代码

 @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView mTextView = (TextView) findViewById(R.id.show_jni_txv);        mTextView.setText(getMsgFromJNI());    }

最后运行成功,如下

2017-03-26 15-46-31屏幕截图

0 0
原创粉丝点击