首先把ndk安装好,比较简便的方法是通过android studio的SDK manager来安装,上图。
把NDK方框勾选上。
这一步告诉ndk-build在哪里,
在File选项卡中选择Project Structure,
在Android NDK location那里设置你的ndk路径。
设置好之后,local.properties文件中看到如下内容说明设置成功。
然后在在gradle.properties的文件末尾加上android.useDeprecatedNdk=true,ndk的配置才算完成。
二、java及c代码编写
举例说明,在src/main/java包下面新建一个java类JNITest.java,里面写一个简单的函数(java调C中的方法都需要用native声明且方法名必须和c的方法名一样)。
package com.example.tongjing.myapplication;
public class JNITest {
public native String getStringFromC();
}
然后选择build选项卡中的make project,会在工程目录下的\build\intermediates、classes\debug\com\example\tongjing\myapplication中看到自己编译后的class文件JNITest.class如下图所示:
首先打开android studio的Terminal命令行工具,打开步骤是View->Tool Windows->Terminal。
在命令行中进入工程的main目录下,执行命令:
javah -d jni -classpath E:\code\Android\app\build\intermediates\classes\debug com.example.tongjing.myapplication.JNITest
之后就会在main目录下生成jni文件夹,同时生成.h文件。
如果觉得这个文件名太长了,可以自己修改,文件里的内容不要修改。我把名字改成了JNITest.h。
同样在jni文件夹下新建一个名为JNITest.cpp的文件,内容如下:
其中方法名要和.h文件中保持一致。
完成之后在MainActivity中调用一下。
首先import这个类,然后调用。
package com.example.tongjing.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.example.tongjing.myapplication.JNITest;
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("JNITest");
JNITest");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(new JNITest().getStringFromC());
}
}
在build.gradle文件的android下的defaultConfig配置块内加入以下内容。
在jni目录下创建Android.mk文件,内容如下:
创建Application.mk,内容如下:
这里的APP_ABI的是目标平台,all代表所有平台,也可以指定特定平台。
在Terminal中执行ndk-build,就可以编译生成so库了。
生成的so文件都在src/main/libs目录下。
最后的结果。