NDK环境相关

最近在之前老项目中进行NDK开发,发现在Android Studio中编写C代码时候,编译器没有自动补全的提示,很蛋疼,于是研究通过以下方法成功解决:
1、创建完成jni目录,生成.h文件及创建.c文件
2、rebuild项目,生成Android.mk文件
在这里插入图片描述
Android.mk文件内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := app
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_SRC_FILES := \
	F:\practice\NDKTest\app\src\main\jni\ndk_file_patch.c \

LOCAL_C_INCLUDES += F:\practice\NDKTest\app\src\debug\jni
LOCAL_C_INCLUDES += F:\practice\NDKTest\app\src\main\jni

include $(BUILD_SHARED_LIBRARY)

再新建的.c文件关联可在LOCAL_SRC_FILES下添加路径即可,或者重新rebuild自动关联路径。

如图,Android.mk文件位于app->build->intermediates->ndk目录下
此时rebuild会报如下错误:
在这里插入图片描述
暂不用理会,继续下一步骤。
3、切换为Android工程,右键项目–>Link C++ Project with Gradle
在这里插入图片描述
选择之后会弹出集成ndk的选择框:
在这里插入图片描述
此处我选择ndk-build的方式,下方路径选择步骤2中的Android.mk文件。

点击ok之后,会在.gradle文件中增加如下配置:
在这里插入图片描述
此时再编写.c文件,便有c函数自动补全的提示:
在这里插入图片描述
至此,AS中C代码无法自动补全的问题已成功解决!
如果是新建项目,可以在创建项目时勾选include C/C++。

另外,再记录一个报错问题:
在这里插入图片描述
错误信息:
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/sz.com.myjni-1/base.apk”],nativeLibraryDirectories=[/data/app/sz.com.myjni-1/lib/arm64, /data/app/sz.com.myjni-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn’t find “libndk_file_patch.so”
这是由于Java代码动态加载.so库找不到而报的错,动态加载.so代码:

static {
        System.loadLibrary("ndk_file_patch");
    }

所以,还需在gradle中指定编译出.so文件的名字(默认为工程app module名称):
在这里插入图片描述
UnsatisfiedLinkError即解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值