Android studio2.2+,配置NDK,JNI开发

版权声明:原创作品,转载请注明原创链接地址! https://blog.csdn.net/wangxp423/article/details/81036547

一,Android studio2.2+以上版本

2.2以上版本默认是配置了NDK的。在你android SDK目录下的ndk-bundle下。

在我们项目下的local.properties下已经配置好NDK路径了,如下(我的路径)
ndk.dir=C:\forwork\java\Android\sdk\ndk-bundle
sdk.dir=C:\forwork\java\Android\sdk

新建工程,如下图,勾选红框选项c++ suport
这里写图片描述

勾选了以后我们会发现新建的工程已经给我们配置好了NDK所需的环境,并且给我们建好了一个JNI的简单例子。
因为我也勾选了kotlin support所以新建的项目是kotlin格式的。
这里写图片描述
我们会发现在新建的项目中已经有了,native方法,和一个library直接运行,调用的就是cpp里面的方法返回的String 字符串。

二,创建自己的library

public class NativeActivity extends AppCompatActivity {
    static {
        System.loadLibrary("native-activity");
    }
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.sample_text);
        textView.setText(helloFromC());
    }

    public native String helloFromC();
}

我们新建一个Activity 并在里面创建自己的native方法helloFormC()。这个时候会报错,因为没有这个方法,不用管,接下来生成我们自己的.h文件。

打开android studio 的Terminal控制台,cd 到java目录下 输入命令:javah -d ../jni -jni com.xp.vedio.NativeActivity
“-d”后面是要生成文件的目录,jni后面是要生成的文件名字。回车以后 会在jni目录下生成我们需要的.h文件,发现之前的报错没有了。
这里写图片描述

然后根据.h文件,写我们需要的.cpp文件,跟.h文件对应,.cpp文件才是真正的方法实体文件。

#include <jni.h>
#include <string>
#include "com_xp_vedio_NativeActivity.h"

extern "C" JNIEXPORT jstring

JNICALL
Java_com_xp_vedio_NativeActivity_helloFromC(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++ as NativeActivity";
    return env->NewStringUTF(hello.c_str());
}

.cpp文件的方法名和.h文件是对应的。后面发现不要.h文件也是可以的。好处可能是方便些.cpp文件方法把,毕竟.h是生成的。

最后一步:
在项目的CMakeLists.txt文件,这个是新建项目的时候,自动给你生成的。我们需要在这个文件下加入我们的.cpp文件,让他自己编译。改文件已经给了我们很友好的提示。

add_library( # Sets the name of the library.
             native-activity

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/jni/native-activity.cpp )

第一行使我们的.cpp文件名字,第二行分享改文件,第三行文件路径。

target_link_libraries( # Specifies the target library.
                       native-lib
                       native-activity

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

在target_link_libraries加入自己的.cpp文件。然后运行,就可以了。
如果不加入的上面东西的话,会造成找不到对应的.so文件,会报错。

最后点击studio的Build–》Make project会生成apk文件。点击双击apk文件
这里写图片描述

对应的.so文件已经生成,并且打包在apk文件中。

运行,大功告成。
这里写图片描述

之前因为NDK编译的各种麻烦,都懒得去弄,现在发现android 对于 NDK的支持越来越好了。

猜你喜欢

转载自blog.csdn.net/wangxp423/article/details/81036547