gpt4 book ai didi

android - Android Studio/Gradle无法为x86_64构建共享库

转载 作者:行者123 更新时间:2023-12-03 18:14:35 25 4
gpt4 key购买 nike

我正在尝试使用Android Studio与NDK制作应用程序。

这涉及到构建一个.so文件,然后我的Java应用程序将其与System.loadLibrary一起使用。

不幸的是,.so文件仅基于ARM或x86构建,但是gradle不能为x86_64 abiFilter构建。

我的build.gradle(我使用Android Studio的experimental Gradle plugin获得NDK支持),去除了不相关的细节(去除了productFlavors的细节):

apply plugin: 'com.android.model.application'

model {
android {

compileSdkVersion = 19
buildToolsVersion = "23"

defaultConfig.with {
applicationId = "com.example"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 19
}
}

android.ndk {
moduleName = "JNIProcessor"
}

android.productFlavors {

create("arm") {
ndk.with {
abiFilters += "armeabi-v7a"
}
}

create("x86") {
ndk.with {
abiFilters += "x86"
}
}

create("x86-64") {
ndk.with {
abiFilters += "x86_64"
}
}
}
}


现在,如果我运行 ./gradlew installx86Debug --info,则会得到输出(格式化为多行以便于阅读):

Selected primary task 'installX86Debug' from project :
file or directory '/home/niklas/AndroidStudioProjects/androidcl/app/build/intermediates/pre-dexed/x86/debug', not found
Tasks to be executed: [
task ':app:preBuild',
task ':app:preX86DebugBuild',
task ':app:checkX86DebugManifest',
task ':app:prepareX86DebugDependencies',
task ':app:compileX86DebugAidl',
task ':app:compileX86DebugRenderscript',
task ':app:generateX86DebugBuildConfig',
task ':app:generateX86DebugAssets',
task ':app:mergeX86DebugAssets',
task ':app:generateX86DebugResValues',
task ':app:generateX86DebugResources',
task ':app:mergeX86DebugResources',
task ':app:processX86DebugManifest',
task ':app:processX86DebugResources',
task ':app:generateX86DebugSources',
task ':app:processX86DebugJavaRes',
task ':app:compileX86DebugJavaWithJavac',
task ':app:copyX86DebugX86JNIProcessorSharedLibraryGdbServer',
task ':app:createX86DebugX86JNIProcessorSharedLibraryGdbsetup',
task ':app:compileX86DebugX86JNIProcessorSharedLibraryJNIProcessorMainCpp',
task ':app:linkX86DebugX86JNIProcessorSharedLibrary',
task ':app:stripSymbolsX86DebugX86JNIProcessorSharedLibrary',
task ':app:x86DebugX86JNIProcessorSharedLibrary',
task ':app:compileX86DebugSources',
task ':app:preDexX86Debug',
task ':app:dexX86Debug',
task ':app:validateDebugSigning',
task ':app:packageX86Debug',
task ':app:zipalignX86Debug',
task ':app:assembleX86Debug',
task ':app:installX86Debug'
]


但是,如果我使用 ./gradlew installx86-64Debug --info为64位构建,则输出仅包含(所有 gradlew输出行在这两个构建之前都相同):

Selected primary task 'installX86-64Debug' from project :
Tasks to be executed: [
task ':app:preBuild',
task ':app:preX86-64DebugBuild',
task ':app:checkX86-64DebugManifest',
task ':app:prepareX86-64DebugDependencies',
task ':app:compileX86-64DebugAidl',
task ':app:compileX86-64DebugRenderscript',
task ':app:generateX86-64DebugBuildConfig',
task ':app:generateX86-64DebugAssets',
task ':app:mergeX86-64DebugAssets',
task ':app:generateX86-64DebugResValues',
task ':app:generateX86-64DebugResources',
task ':app:mergeX86-64DebugResources',
task ':app:processX86-64DebugManifest',
task ':app:processX86-64DebugResources',
task ':app:generateX86-64DebugSources',
task ':app:processX86-64DebugJavaRes',
task ':app:compileX86-64DebugJavaWithJavac',
task ':app:compileX86-64DebugSources',
task ':app:preDexX86-64Debug',
task ':app:dexX86-64Debug',
task ':app:validateDebugSigning',
task ':app:packageX86-64Debug',
task ':app:zipalignX86-64Debug',
task ':app:assembleX86-64Debug',
task ':app:installX86-64Debug'
]


因此,对于64位版本,这些条目丢失了:

    task ':app:copyX86DebugX86JNIProcessorSharedLibraryGdbServer', 
task ':app:createX86DebugX86JNIProcessorSharedLibraryGdbsetup',
task ':app:compileX86DebugX86JNIProcessorSharedLibraryJNIProcessorMainCpp',
task ':app:linkX86DebugX86JNIProcessorSharedLibrary',
task ':app:stripSymbolsX86DebugX86JNIProcessorSharedLibrary',
task ':app:x86DebugX86JNIProcessorSharedLibrary',


这可以清楚说明为什么我的 .so文件丢失了(例如,不存在 link任务)。

为什么gradle决定不为我的x86_64 abiFilter添加链接步骤?

最佳答案

通过将NDK标签内的“ platformVersion”设置为23(可能只需为21或更高)即可解决该问题。因此,不是用于Java部分的minSdkVersion和targetSdkVersion值,而是用于NDK部分的platformVersion值。

关于android - Android Studio/Gradle无法为x86_64构建共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674267/

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