【问题标题】:Cannot build ARToolKit nftSimple into android phone with Android ndk issues无法将 ARToolKit nftSimple 构建到具有 Android ndk 问题的 Android 手机中
【发布时间】:2016-08-08 15:27:46
【问题描述】:

您好,我是 Android Studio 和 ARToolKit 的新手,我正在尝试在我的 Android 手机上安装和运行 ARToolKit 中的应用程序。

我已将 ntfsimple 导入 Android Studio,下载 ARtoolKit 时提供了 nftSimple

当我将设备连接到笔记本电脑并尝试对其进行调试时,它显示如下错误。

错误:(23) *** Android NDK:在包含之前缺少 LOCAL_MODULE BUILD_SHARED_LIBRARY 在 C:\Users\User\AndroidStudioProjects\NFT1\nftSimple\build\intermediates\ndk\debug\Android.mk .停下来。

错误:任务 ':nftSimple:compileDebugNdk' 执行失败。

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\User\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd'' 以非零退出值 2 结束

这是我的 android.mk

MY_LOCAL_PATH := $(call my-dir)
LOCAL_PATH := $(MY_LOCAL_PATH)

# Pull ARToolKit into the build
include $(CLEAR_VARS)
ARTOOLKIT_DIR := $(MY_LOCAL_PATH)/../../../android
ARTOOLKIT_LIBDIR := $(call host-path, $(ARTOOLKIT_DIR)/obj/local/$(TARGET_ARCH_ABI))
define add_artoolkit_module
    include $(CLEAR_VARS)
    LOCAL_MODULE:=$1
    LOCAL_SRC_FILES:=lib$1.a
    include $(PREBUILT_STATIC_LIBRARY)
endef
ARTOOLKIT_LIBS := ar2 kpm util eden argsub_es armulti ar aricp jpeg arvideo
LOCAL_PATH := $(ARTOOLKIT_LIBDIR)
$(foreach module,$(ARTOOLKIT_LIBS),$(eval $(call add_artoolkit_module,$(module))))
LOCAL_PATH := $(MY_LOCAL_PATH)

# Android arvideo depends on CURL.
CURL_DIR := $(ARTOOLKIT_DIR)/jni/curl
CURL_LIBDIR := $(call host-path, $(CURL_DIR)/libs/$(TARGET_ARCH_ABI))
define add_curl_module
    include $(CLEAR_VARS)
    LOCAL_MODULE:=$1
    #LOCAL_SRC_FILES:=lib$1.so
    #include $(PREBUILT_SHARED_LIBRARY)
    LOCAL_SRC_FILES:=lib$1.a
    include $(PREBUILT_STATIC_LIBRARY)
endef
#CURL_LIBS := curl ssl crypto
CURL_LIBS := curl
LOCAL_PATH := $(CURL_LIBDIR)
$(foreach module,$(CURL_LIBS),$(eval $(call add_curl_module,$(module))))
LOCAL_PATH := $(MY_LOCAL_PATH)

include $(CLEAR_VARS)

# ARToolKit libs use lots of floating point, so don't compile in thumb mode.
LOCAL_ARM_MODE := arm

LOCAL_PATH := $(MY_LOCAL_PATH)
LOCAL_MODULE := nftSimpleNative
LOCAL_SRC_FILES := nftSimple.cpp ARMarkerNFT.c trackingSub.c

# Make sure DEBUG is defined for debug builds. (NDK already defines NDEBUG for release builds.)
ifeq ($(APP_OPTIM),debug)
    LOCAL_CPPFLAGS += -DDEBUG
endif

LOCAL_C_INCLUDES += $(ARTOOLKIT_DIR)/../include/android $(ARTOOLKIT_DIR)/../include
LOCAL_LDLIBS += -llog -lGLESv1_CM -lz
LOCAL_WHOLE_STATIC_LIBRARIES += ar
LOCAL_STATIC_LIBRARIES += ar2 kpm util eden argsub_es armulti aricp cpufeatures jpeg arvideo
#LOCAL_SHARED_LIBRARIES += $(CURL_LIBS)
LOCAL_STATIC_LIBRARIES += $(CURL_LIBS)

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/cpufeatures)

这是我的 build-shared-libraru.mk

LOCAL_BUILD_SCRIPT := BUILD_SHARED_LIBRARY
LOCAL_MAKEFILE     := $(local-makefile)

$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))
$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))
$(call check-LOCAL_MODULE_FILENAME)

# we are building target objects
my := TARGET_

$(call handle-module-filename,lib,$(TARGET_SONAME_EXTENSION))
$(call handle-module-built)

LOCAL_MODULE_CLASS := SHARED_LIBRARY
include $(BUILD_SYSTEM)/build-module.mk

【问题讨论】:

    标签: android android-studio android-ndk augmented-reality artoolkit


    【解决方案1】:

    您需要遵循文档: http://artoolkit.org/documentation/doku.php?id=4_Android:android_native

    密切相关。这向您展示了如何设置您的开发环境以及您需要构建什么以及如何构建它。

    如果您遇到困难,请告诉我。


    编辑:

    根据您的评论,我了解到您使用的是 Windows。

    请记住,在 Windows 上,您需要安装 GitBash。 Git 本身还不够! Git Bash 可以作为 Git 安装程序的一部分进行安装。因此,如果您没有安装 Git Bash,请重新运行安装程序。

    另一个前提条件是您已设置以下所有 ANDROID_* 和 NDK 环境变量:

    在 Git Bash 上导航到您的 ARToolKit 根/android 目录: /安卓

    在此目录中,您将找到一个 build.sh 脚本。使用以下命令在 Git Bash 中运行该脚本:

    ./build.sh
    

    本地库的构建开始。之后,如果您也对原生示例感兴趣,可以运行 build_native_examples.sh。

    【讨论】:

    • 对不起,我真的很陌生,我很难理解它。我已经解决了所有先决条件。我能知道 Git 安装的用途吗?
    • 当您在 Windows 上时,build.sh 将无法在 Windows 命令行中运行,因为它使用 Windows 命令行不知道的功能。这就是为什么我们建议使用 GIT bash 安装 GIT 以便能够运行 build.sh。
    • 谢谢!我已经为我的 Windows 安装了 Git,接下来如何开始构建原生 android 库?
    • 但我在输入时遇到“权限被拒绝”
    • 抱歉,我不明白您输入的是什么?你的 ARToolKit 主目录在哪里?
    【解决方案2】:

    这可能会对你有所帮助。

    我认为它没有指向 jni 文件夹所在的路径,因此它无法识别 jni 文件夹内的 .mk 文件 ARTOOLKIT_DIR := $(MY_LOCAL_PATH)/../../../android 在本节中,您将提供 jni 文件夹所在的路径。 ARTOOLKIT_DIR:=~/AndroidStudioProjects/extractedZipFolderName/android

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-23
      • 2013-08-16
      • 2012-08-05
      • 2012-03-30
      • 1970-01-01
      • 2013-03-23
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多