首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移到实验级Android 2.0+时的包含问题

迁移到实验级Android 2.0+时的包含问题
EN

Stack Overflow用户
提问于 2016-05-13 18:36:37
回答 1查看 435关注 0票数 1

我的问题超出了标题所说的范围,所以在问题之前会给出一个背景。自从我从AndroidStudio1.5升级到2.0 (现在使用2.1.1稳定的试用测试版)之后,我就一直在实验问题。

背景

当我更新Android并在NDK中打开c文件时,我开始收到以下消息:

即使我已经同步了这个项目,这个消息也会出现。

编译器运行良好,因为我可以忽略c中的修改,而且它仍然会编译。然后,我尝试添加一个新的包含由我创建的文件,其中包含了一些设置和方法,同样的文件也包含在其他运行良好的文件中。但是,这一次编译器会抛出以下错误:

代码语言:javascript
复制
error: undefined reference to 'my_method'

调试花费了很长一段时间,但是没有成功,所以决定迁移到不发生此问题的实验级。

下面是我现在使用的内容:-梯度-实验:0.7.0-包装: gradle-2.10-all.zip

我的分级文件是:

代码语言:javascript
复制
apply plugin: 'com.android.model.application'
import org.apache.tools.ant.taskdefs.condition.Os

model {
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"

        defaultConfig.with {
            applicationId "com.domain.myapp"
            minSdkVersion.apiLevel 15
            targetSdkVersion.apiLevel 23
            versionCode 1
            versionName "1.0"
        }

        tasks.withType(JavaCompile) {
            compileTask -> compileTask.dependsOn ndkBuild
        }

        task ndkBuild(type: Exec) {
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
            } 
        }
    }
    task runSwig(type: Exec, description: 'Run swig config') {
        workingDir 'src/main'
        commandLine 'cmd', '/c', 'swig.bat'
    }

    ndk {
        moduleName "MyNativeModule"
        //toolchain "clang"
    }

    sources.main {
        jni {
            source {
                srcDir 'src/main/libs' //set .so files location to libs
                srcDirs = [] //disable automatic ndk-build call
            }
        }
    }

    buildTypes {
        debug {
            debuggable true
            ndk.with {
                debuggable = true
            }
            versionNameSuffix "1.0"
        }        
    }
}

repositories {
    maven { url "https://jitpack.io" }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'    
    compile 'org.litepal.android:core:1.2.1'
}

现在,当我运行清理成功的时候,但是..。

现在的问题:

*我在使用libusb库进行构建时,会出现以下错误:

代码语言:javascript
复制
-Error:(20, 20) config.h: No such file or directory
-Error:(33, 30) libkern/OSAtomic.h: No such file or directory
-Error:(29, 25) dev/usb/usb.h: No such file or directory
... many others like these

对于库中的config.h,它包括如下所示:

代码语言:javascript
复制
#include <config.h>

因此,由于我在库中的父目录中有该文件,所以我设法使它以如下方式工作:

代码语言:javascript
复制
#include "../config.h> 

另一方面,对于其他文件,我没有目录或库中的文件,所以我不能引用它们。此外,我在谷歌上看到这些文件属于MacOS。

与标准级,这不是一个问题,因为它编译像一个魅力!

我的问题是:

  • 为什么会发生这种情况?我是否遗漏了一些编译标志来忽略这些文件?
  • 我怎样才能解决这个问题,最好的办法是什么?

我已经尝试过的:

  • 将NDK从11更新到12
  • 从稳定的Android切换到Beta通道并返回
  • 尝试不同的分级版本稳定和实验

由于我正在熟悉NDK和C,我的问题可能是显而易见,任何帮助都将是非常感谢的!

更新

我正在构建libusb库,因为我对它做了一些更改。(使用稳定的gradle,除了我上面描述的问题外,在更新之前,我已经使用这个设置几个月了,一切都像预期的那样正常工作)

我的目录结构如下:

代码语言:javascript
复制
-jni
-jni/myUSB/libusb

下面是我的Android.mk文件,您可以看到我是如何构建它们的: jni:

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)
ROOT_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(ROOT_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := myModuleName
LOCAL_CFLAGS := -O2 -ffast-math
LOCAL_LDLIBS := -llog
LOCAL_SRC_FILES := \
jiw.cpp \
mainFile.c \
otherFile.c

LOCAL_C_INCLUDES := $(LOCAL_PATH)/
LOCAL_SHARED_LIBRARIES := myUSB
include $(BUILD_SHARED_LIBRARY)

myUSB:

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)
ROOTUSB_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(ROOTUSB_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := myUSB
LOCAL_CFLAGS := -O2 -ffast-math
LOCAL_LDLIBS := -llog -pthread
LOCAL_SRC_FILES := \
myUsbMainFile.c \
myUsbInterface.c \

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/ 

LOCAL_SHARED_LIBRARIES := android-usb
include $(BUILD_SHARED_LIBRARY)

libusb:

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := android-usb
LOCAL_CFLAGS := -O2 -ffast-math
LOCAL_LDLIBS := -llog
LOCAL_SRC_FILES := \
core.c \
descriptor.c \
io.c \
sync.c \
os/linux_usbfs.c \
os/threads_posix.c \
os/android_java.c

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/ \
$(LOCAL_PATH)/os
include $(BUILD_SHARED_LIBRARY)
EN

回答 1

Stack Overflow用户

发布于 2016-05-16 09:10:17

我看不出来,在哪里您将libusb连接到您的项目。所以,您可能需要手动链接它。这里就是一个例子,如何在build.gradle中静态/动态地链接库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37217116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档