NDK入门 第一个NDK项目

来源:互联网 发布:uefi ubuntu 双系统 编辑:程序博客网 时间:2024/06/05 05:44

1 新建一个android项目
在新建的项目中新建类JniTest,并在类中编写native方法。
这里写图片描述

2 使用cmd命令生成.h文件
我的teminal不能用了 我擦,所以我用的cmd。
首先rebuild project一下。然后会看到build下生成的classes文件夹。
这里写图片描述

使用doc命令,首先切换到debug的目录下。

cd D:\Development\StudioProject\Application\app20-ndk\build\intermediates\classes\debug

然后使用命令

javah -jni -classpath . com.yeliang.app20_ndk.JniTest

这里写图片描述

然后会发现生成的.h
这里写图片描述

.h文件内容
这里写图片描述

3 编写c代码
在main文件夹下新建jni文件夹,并把JniTest.h文件拷贝到此文件夹下
这里写图片描述

新建c文件
这里写图片描述

把刚才的.h文件中的方法拷贝到此,并实现
这里写图片描述
此方法只是简单的返回了一个字符串。

4 加载so库
在gradle中加如下配置

    ndk{       moduleName "yeliang-so-name"         //生成的so名字       abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。目前可有可无。        }

注意放到defaultConfig中:
这里写图片描述

在JniTest中添加如下代码

static{        System.loadLibrary("yeliang-so-name");    }

这里写图片描述

在gradle.properties中添加如下

android.useDeprecatedNdk=true

这里写图片描述

5 调用so库中的内容

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView textView = (TextView)findViewById(R.id.tv);        textView.setText(JniTest.setText());    }}

运行结果
这里写图片描述

会看到生成的so
这里写图片描述

如果遇到错误:
这里写图片描述

意思是没有声明此项目支持ndk,需要在gradle(Project)中配置这一句话

android.useDeprecatedNdk=true

如果遇到错误;

Error:Execution failed for task ':app:incrementalDebugJavaCompilationSafeguard'.> java.io.IOException: Could not delete path app\build\intermediates\classes\debug'.

说明在rebuild时候,无法删除你的build下的文件。可能你在别的地方打开了此文件。比如cmd。之前不是在cmd中切换到debug目录下,用于生成.h。所以此时你需要关闭打开你文件夹的应用。然后重新rebuild。

原创粉丝点击