android编译成共享库,NDK和Android Studio,因为共享库而编译崩溃

我发布了我为解决问题的方法而创建的指南。可能有一些不相关的东西,但它们仍然有用。

主要问题是我禁用了自动建筑,而且方法的名称稍有不同。此外,发布的错误是由于我没有针对APP_PLATFORM 8而引起的,正如最后解释的。

基本出处:

的想法是,我们必须匹配并编译本地方法的Java声明。 首先,jni文件有一个默认文件夹。这个bug在src/main/jniLibs中。如果你想改变,你可以用这种方式:

sourceSets.main {

jniLibs.srcDir 'src/main/libs'

}

要小心,不要使用jni.srcDirs = []否则默认JNI编译将被禁用,您必须手动使用任务和其他做复杂的东西(现在没有必要)。 又有两个.mk文件...他们只会被忽略,因为我们定义:

ndk {

moduleName "exam_filter"

ldLibs "log", "jnigraphics"

}

在gradle这个文件,这对gradle这个相应的版本。每个新的更改都必须在这里完成,而不是使用makefile。 为了使其工作,每个本地函数都应该匹配java中声明的每个函数。为此,最好从java自动创建头文件。这对于以这种方式使用javah非常有用:

javah -classpath "/home/[...]/Android/Sdk/platforms/android-22/android.jar:./" -jni com.package.[...].NameOfTheClass

而这应该从src/main执行。在./应该是a之前,请注意在窗口中的“:”。相反(也是指南建议;在Linux中是错误的)。通过这种方式,您可以将头文件复制并直接用于源代码(以防移动功能或创建新代码)。

用手

你可以手工用这个命令还编译:

ndk-build -C jni

然而,由于生成文件丢失将无法正常工作。您应该添加一个Android.mk文件是这样的:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := exam_filter

LOCAL_SRC_FILES := exam_filter.cpp

LOCAL_LDLIBS := -lm -llog -ljnigraphics

include $(BUILD_SHARED_LIBRARY)

而一个Application.mk文件是这样的:

APP_PLATFORM=android-8

然而,现在有没有必要,如果你使用的是由做手工由Android Studio自动建设。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值