一、编译环境

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张图片

更多相关文章

  1. 详解React Native监听Android回退按键与程序化退出应用
  2. Android 学习笔记4---签名Android的执行文件
  3. .Net程序员玩转Android开发---(12)ListView显示数据
  4. Android控件之利用selector自定义的带文字的图片按钮
  5. 谈Android下一个apk安装多个程序入口图标
  6. Android 开发之Matrix图片处理类的使用

随机推荐

  1. android下用itext修改pdf模板文件
  2. Android仿人人客户端(v5.7.1)——有关滑动
  3. Android(安卓)AIDL运用总结
  4. Android官方文档翻译--How Android(安卓)
  5. Android开发之 混淆加固和反编译
  6. android的Notifications的例子demo
  7. Android(安卓)Studio的使用 及 JDK环境配
  8. Android开发体会与心得
  9. Android(安卓)APK文件在电脑(PC虚拟机)上
  10. Android常见内存泄漏及优化总结