gpt4 book ai didi

android - 如何告诉 Gradle 不要在我的 .jar 依赖项中排除 .so 文件?

转载 作者:太空狗 更新时间:2023-10-29 13:46:23 25 4
gpt4 key购买 nike

我有一个 .jar .so 附带的依赖项里面的库。

library.jar
|
-----com/company
|
-----.class files
-----libs
|
-----libX.so

jar 利用了这个 .so内部库,我正在构建一个使用 jar 的 Android 应用程序。

在我构建 apk 之前一切都很好:通过使用 7zip 探索它,我发现 .so文件已经消失,导致使用该应用程序时出现各种错误。

那么有没有办法告诉 Gradle 不要排除 .so构建时的文件?我不想将它们手动复制到我的 Android 项目中的文件夹中,因为我没有直接使用它们,而是使用 .jar库是加载它们的库。

编辑 1:添加 build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 28
defaultConfig {
applicationId "com.company.myapp"
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation files('libs/lib1.jar')
implementation files('libs/lib2.jar')
}

编辑2:这是按照@shizhen之前的建议解决的

1- 我的 .jar包括 .so libs 中的文件目录。我不得不将其重命名为 lib .

2- 我解压了 .jar收集 .so文件。

3- 我创建了 src/jniLibs文件夹并放入 .so文件,每个文件在其各自的 <ANDROID_ABI> 中文件夹。

4- 我修改了 build.gradle要包含的文件:

android {
...
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDir 'src/jniLibs'
}
}
}

5 - 等等!决赛.apk现在包括 native 库。

最佳答案

Everything is good until after I build the apk : by exploring it using 7zip, I discover that the .so files have disappeared, leading to all sorts of errors when using the app.

我相信您的 jar 依赖项最初不是针对 android 的,但通常是针对 Java 的。

Android 应用程序使用.dex 格式,因此您所有的.jar 依赖项将被重新打包到一个或多个dex 文件中。您的 .so 文件将不会被使用,因为它在 jar 中。

So is there any way to tell Gradle not to exclude the .so files when building? I don't want to copy them manually into a folder in my Android Project, since I'm not using them directly, but the .jar library is the one loading them.

因此,为了使您的 jar 适应 Android 应用程序,您必须解压 jar 并取出所有 .so 文件并手动> 将它们放入 src/jniLibs/<ANDROID_ABI>/ ,例如

jniLibs
├── arm64-v8a
│   ├── libxxx.so
│   └── libyyy.so
├── armeabi-v7a
│   ├── libxxx.so
│   └── libyyy.so
├── x86
│   ├── libxxx.so
│   └── libyyy.so
└── x86_64
├── libxxx.so
└── libyyy.so

关于android - 如何告诉 Gradle 不要在我的 .jar 依赖项中排除 .so 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521953/

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