我尝试用android(java)调用so库文件,gradle(kotlin DSL, version 6.0)编译的时候, 出现一下问题:
What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
out extracted from path E:\proj\android\MyApplicationWithJava\app\build\intermediates\merged_jni_libs\debug\mergeDebugJniLibFolders\out\libhello.so is not an ABI
goole了一下,可能有几个方面导致这个问题的出现
1 so文件和设备的ABI不一致
2 gradle的配置问题
上面都尝试了,并不能解决这个问题。
另外,我的so库文件是通过手动命令编译的,不是通过项目,命名如下:
`g++ -m64 com_shinja_jni_HelloJNI.cpp -fPIC -shared -o libhello1.so -I D:\app\code\jdk\jdk17\include -I D:\app\code\jdk\jdk17\include\win32
`
说明:
system: win10
jdk: 17
android studio: 2024.1.1
android SDK: 34
gradle: 6.0
g++:(Rev6, Built by MSYS2 project) 13.2.0
非常感谢您的回答!
您遇到的错误“out extracted from path ... libhello.so is not an ABI”通常表明Android构建系统无法识别或正确处理提供的.so
文件。这通常是因为.so
文件与Android平台预期的ABI(应用程序二进制接口)不匹配。
在您的情况下,问题可能是由于以下几个原因:
g++ -m64
编译的libhello1.so
是针对64位系统的,但Android设备通常使用ARM或ARM64架构。因此,您应该为Android编译正确的ABI版本。.so
文件可能不包含Android所需的元数据或签名,这可能导致构建系统无法识别它。build.gradle
文件中正确配置了NDK和CMake(如果您正在使用它)以处理原生库。使用NDK编译SO文件:
使用Android NDK(Native Development Kit)来编译您的原生库。NDK包含了一组工具,用于在Android平台上编译C和C++代码。您可以使用CMake或ndk-build作为构建系统。
以下是一个使用CMake的基本示例CMakeLists.txt
:
cmake_minimum_required(VERSION 3.4.1)
add_library(hello-jni SHARED com_shinja_jni_HelloJNI.cpp)
find_library(log-lib log)
target_link_libraries(hello-jni ${log-lib})
然后,在您的build.gradle
文件中配置CMake:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
externalNativeBuild {
cmake {
path "src/main/jni/CMakeLists.txt"
version "3.10.2"
}
}
}
build.gradle
文件,确保没有遗漏或错误的配置。遵循上述步骤后,您应该能够解决“is not an ABI”的错误,并成功地在Android应用程序中集成您的原生库。
gradle构建错误: Build file 'D:\movierecommend\build.gradle' line: 33 A problem occurred evaluating root project 'movie-recommend'. org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact.<init>(L
我试图在android studio上使用java 1.7版,但不幸的是,它不能正常工作。。。如果在
我运行的是Mac OSX,我安装了android Studio-它启动正常。 问题1 我用一个空活动开始一个新项目。在最上面的窗户上我收到一条信息 问题2 我在底部窗口中看到以下错误: 错误:CompilesDKVersion android-L需要使用JDK 7 Open SDK Settings进行编译 打开文件 当我尝试在设备上运行项目时,我得到以下错误: 失败[INSTALL_FAILED
救急,我導入的maven項目怎麽構建報錯,我自己下了jdk但是好像他構建用的不是我下載的,我又不知道怎麽更換 環境變量也設置了,但是他用的不是我下載和設置的jdk,我安裝在D盤,他用的是D盤的jdk,求大佬解答 ======== 上面的問題解決了但是還是報錯:
问题内容: 我正在尝试在Android Studio中使用Java版本1.7,但是很遗憾,它无法正常工作…如果将版本设置为 但是,当我使用带有字符串的声明语句时,出现了在Java 1.7中应该发生的错误,因此我是否需要设置其他设置? 问题答案: 不,没有设置可更改。Android SDK不支持完整的Java 7语法,因此您不能使用它。 请注意,最新的android版本支持java.nio。*(ja
现在让我们看一个典型的多项目构建. 下面是项目的布局: Example 7.10. 多项目构建 - 分层布局 构建布局 multiproject/ api/ services/webservice/ shared/ 注意: 这个例子的代码可以在 samples/java/multiproject 里找到. 现在我们能有三个项目. 项目的应用程序接口 (API) 产生一个 JAR 文件,