引用块内容
下载配置android ndk
解压到SDK
我是从android studio设置里面直接下载的
如果是单独下载解压,NDK的位置应该也要配置:
如果你不配置也可以单独某个项目中local.properties中配置:
ndk.dir=D:\\Android_Doc\\Sdk\\ndk-bundle
将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
右键项目-进入项目路径
shift + 右键项目文件夹,然后选择在此处打开命令窗口
输入(环境变量要配置好):
ndk-build
右键app-src-main目录 新建jniLibs文件夹,然后把新出现的libs下面的所有文件拷到这里面去(包含了所有平台的so文件)
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());
}
}
运行:
问题:
如果在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的错误,我不确定是不是这些步骤的原因。有知道问题的可以说一下