借助C/C++进行Android开发:NDK的配置与使用

来源:互联网 时间:1970-01-01

Android Studio版本 :1.3.2

NDK版本:android-ndk-r10b


1.下载NDK,选用android-ndk-r10b版本

2. 配置环境变量(像当初配java一样配置)

计算机-右键-属性-高级系统设置-环境变量-系统变量-Path一项—双击

将下载的NDK R10d版本的路径添加到变量值后面(记得加分号,路径名不要有空格)

;D:/code/android-ndk-r10d


3.cmd-输入 ndk-build,显示:



在cmd中输入ndk-build,显示以上内容,说明ndk-build命令可以查找到,但是原则伤讲ndk应该是在一个Android项目中的,所以抛出这样的异常,但是这说明环境已经配好了。



4.打开Android Studio,像正常新建项目一样新建一个Android 项目


5.在MainActivity里写上:

public native String getStringFromNative(); 

即在该类里面定义一个native方法。

附MainActivity.java里的全部代码:

package com.example.pc.ndktest6;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity { public native String getStringFromNative(); private TextView tv=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv= (TextView) findViewById(R.id.tv); tv.setText(" "+getStringFromNative()); } static { System.loadLibrary("MyJni"); }}


为什么要把名字命名为ndktest6呢?

因为我做到第6个测试demo的时候才运行成功,不要问我之前经历了什么


6.Build-Make Project 一下。


7.休息一下



8.在Terminal下输入命令行  cd app/src/main

回车,进入到app/src/main


9.在app/src/main下输入命令行:

javah -d jni -classpath C:/Users/pc/AppData/Local/Android/sdk/platforms/android-23/android.jar;../../build/intermediates/classes/debug com.example.pc.ndktest6.MainActivity


其中
C:/Users/pc/AppData/Local/Android/sdk/platforms/android-23/android.jar;
为Android SDK位置


如果报错无法找到文件MainActivity或者android.app.Activity就多Build-Make Project 几次或者 Clean Project一下


10.

此时,app文件夹下会自动生成一个jni文件夹,文件夹下会包含一个名为

com_example_pc_ndktest6_MainActivity.h

的文件。

文件都建好之后的样子:



11.在jni文件夹下新建两个C文件。

上图是我建完C文件后的样子。

为什么要建两个?

因为有一个是我们测试要用的,但是据说如果只建一个的话会报奇怪的错误,这个错误我也遇到了,解决方法就是再新建一个C文件。

上图中main.c就是要用的,nothing.c就是为了防止报错辅助用的。


12.在main.c里面填上一些测试代码:

#include "main.h"#include "com_example_pc_ndktest6_MainActivity.h"/* * Class: com_example_pc_ndktest6_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_pc_ndktest6_MainActivity_getStringFromNative (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,"***I come from main.c***");}


13.在gradle.properties的最后面添上一句:

android.useDeprecatedNdk=true
表示允许使用NDK


14.在local.properties的最后面加上:

sdk.dir=C/://Users//pc//AppData//Local//Android//sdkndk.dir=D/://code//android-ndk-r10b


sdk.dir那句应该是本来就有的,就加上后面ndk的就行了


15.在app的build.gradle文件下的defaultConfig中加上:

 ndk{ moduleName "MyJni" //设置库(so)文件名称 }


16.

在activity中增加对so的加载:

[java] view plaincopy
  1. static {  
  2.     System.loadLibrary("MyJni");  
  3. }  

上面贴出来的MainActivity代码是加完这句之后的完整代码


17.完成




相关阅读:
Top