gpt4 book ai didi

c - 迁移到实验性 gradle Android Studio 2.0+ 时包含的问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:12 24 4
gpt4 key购买 nike

我的问题超出了标题所说的范围,所以会在问题之前给出背景。自从我从 Android Studio 1.5 更新到 2.0(现在使用 2.1.1 稳定版,也尝试过测试版)以来,我一直在试验问题

背景

当我更新我的 Android Studio 并在 NDK 中打开 c 文件时,y 开始收到以下消息: sync gradle message即使我已经同步了项目,也会出现此消息。

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

error: undefined reference to 'my_method'

调试了好久没有成功,所以决定迁移到实验性的gradle,这样就不会出现这个问题了。

这是我现在使用的:- 渐变实验:0.7.0- 包装器:gradle-2.10-all.zip

我的 gradle 文件是这样的:

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'
}

现在,当我运行 clean 时它成功完成,但是..

现在的问题:

*我正在使用 libusb 库当我尝试构建时,出现以下错误:

-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,它是这样包含的:

#include <config.h>

因为我在库的父目录中有那个文件,所以我设法让它以这种方式工作:

#include "../config.h> 

另一方面,对于其他文件,我没有目录,也没有库中的文件,所以我无法引用它们。此外,当我用谷歌搜索时,我看到这些文件属于 MacOS。

对于标准的 gradle,这不是问题,因为它编译起来非常棒!

我的问题是:

  • 为什么会这样?是否缺少一些编译标志以忽略这些文件?
  • 我该如何解决这个问题,最好的方法是什么?

我已经尝试过的:

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

随着我越来越熟悉 NDK 和 C,我的问题可能很明显,任何帮助将不胜感激!

更新

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

我的目录结构如下:

-jni
-jni/myUSB/libusb

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

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)

我的USB:

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:

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)

最佳答案

我看不到,您在哪里将 libusb 连接到您的项目。因此,您可能必须手动链接它。 Here是一个示例,如何在 build.gradle 中静态/动态链接库。

关于c - 迁移到实验性 gradle Android Studio 2.0+ 时包含的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37217116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com