【Android】windows下使用android studio和ndk-build编译c程序生成so库

一、编译环境

1. 安装ndk

首先把ndk安装好,比较简便的方法是通过android studio的SDK manager来安装,上图。

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第1张图片

把NDK方框勾选上。

2. 配置ndk location

这一步告诉ndk-build在哪里,

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第2张图片

在File选项卡中选择Project Structure,

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第3张图片

在Android NDK location那里设置你的ndk路径。

设置好之后,local.properties文件中看到如下内容说明设置成功。

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第4张图片

然后在在gradle.properties的文件末尾加上android.useDeprecatedNdk=true,ndk的配置才算完成。

二、java及c代码编写

1. java代码编写

举例说明,在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】windows下使用android studio和ndk-build编译c程序生成so库_第5张图片

2. 生成.h文件

首先打开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文件。

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第6张图片

如果觉得这个文件名太长了,可以自己修改,文件里的内容不要修改。我把名字改成了JNITest.h。

3.编写cpp文件

同样在jni文件夹下新建一个名为JNITest.cpp的文件,内容如下:

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第7张图片

其中方法名要和.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());
    }
}

4. 编译配置

在build.gradle文件的android下的defaultConfig配置块内加入以下内容。

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第8张图片

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第9张图片

在jni目录下创建Android.mk文件,内容如下:

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第10张图片

创建Application.mk,内容如下:

这里的APP_ABI的是目标平台,all代表所有平台,也可以指定特定平台。

在Terminal中执行ndk-build,就可以编译生成so库了。

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第11张图片

生成的so文件都在src/main/libs目录下。

最后的结果。

【Android】windows下使用android studio和ndk-build编译c程序生成so库_第12张图片

你可能感兴趣的:(android,android,adroid,studio)