Android Studio 使用NDK

引用块内容

下载配置android ndk

地址

解压到SDK

我是从android studio设置里面直接下载的
Android Studio 使用NDK_第1张图片

如果是单独下载解压,NDK的位置应该也要配置:

如果你不配置也可以单独某个项目中local.properties中配置:

ndk.dir=D:\\Android_Doc\\Sdk\\ndk-bundle

Android Studio 使用NDK_第2张图片

将ndk的根目录配置到系统PATH环境变量

新建一个NDKTest项目

项目右键-新建目录-jni

jni目录中新建三个文件,分别是ndktest.c、Android.mk、Appllication.mk,内容分别如下:

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

jstring Java_example_guanhang_ndktest_MainActivity_helloworld(JNIEnv* env, jobject obj){
    return (*env)->NewStringUTF(env,"Hello world");
}
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ndktest
LOCAL_SRC_FILES := ndktest.c

include $(BUILD_SHARED_LIBRARY)
APP_ABI := all

右键项目-进入项目路径

Android Studio 使用NDK_第3张图片

shift + 右键项目文件夹,然后选择在此处打开命令窗口

输入(环境变量要配置好):

ndk-build

Android Studio 使用NDK_第4张图片

右键app-src-main目录 新建jniLibs文件夹,然后把新出现的libs下面的所有文件拷到这里面去(包含了所有平台的so文件)


Android Studio 使用NDK_第5张图片

layout中加一个textview:

<TextView  android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" />

修改MainActivity中的代码:

public class MainActivity extends AppCompatActivity {


    public native String helloworld();

    static {
        System.loadLibrary("ndktest");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((TextView) findViewById(R.id.tv)).setText(helloworld());
    }
}

运行:

Android Studio 使用NDK_第6张图片

问题:

如果在main里面创建jni目录(这里是另一个项目),编译产生libs(也就是不用拷贝过去),然后运行会出现错误:

Error:Execution failed for task ':app:compileDebugNdk'.
Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

解决方法:

android.useDeprecatedNdk=true

加上去后我的程序出现了Couldn’t load hello: findLibrary returned null的错误,我不确定是不是这些步骤的原因。有知道问题的可以说一下

你可能感兴趣的:(Android Studio 使用NDK)