gpt4 book ai didi

android - APK打包过程中文件重复或Android UnsatisfiedLinkError

转载 作者:行者123 更新时间:2023-12-03 04:35:41 26 4
gpt4 key购买 nike

我有一个 Android 项目,它使用具有相互依赖关系的库:

Android 应用程序依赖于以下原生库

  • 模块 tess-2(包含 tesseract 和 leptonica)
  • 模块 opencv4android
  • 模块库

  • mylibrary 也依赖于 tess-two 和 opencv4android

    以下是我的 Android 应用程序的 build.gradle 文件:
    apply plugin: 'com.android.application'

    dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':libraries:opencv4android')
    compile project(':libraries:tess-two')
    compile project(':libraries:mylibrary')
    }

    android {
    compileSdkVersion 19
    buildToolsVersion "22.0.1"


    defaultConfig {
    minSdkVersion 14
    targetSdkVersion 19
    }

    // packagingOptions {
    // exclude 'lib/armeabi/liblept.so'
    // exclude 'lib/armeabi/libtess.so'
    // exclude 'lib/armeabi-v7a/liblept.so'
    // exclude 'lib/armeabi-v7a/libtess.so'
    // exclude 'lib/mips/liblept.so'
    // exclude 'lib/mips/libtess.so'
    // exclude 'lib/x86/liblept.so'
    // exclude 'lib/x86/libtess.so'
    // }

    sourceSets {
    main {
    manifest.srcFile 'AndroidManifest.xml'
    java.srcDirs = ['src']
    resources.srcDirs = ['src']
    aidl.srcDirs = ['src']
    renderscript.srcDirs = ['src']
    res.srcDirs = ['res']
    assets.srcDirs = ['assets']
    }

    instrumentTest.setRoot('tests')
    debug.setRoot('build-types/debug')
    release.setRoot('build-types/release')
    }
    }

    在此配置上构建 gradle 失败并显示 duplicate files during packaging of APK由于 liblept.so 导致的错误和 libtess.so被复制两次。

    但是,当我取消注释我可以成功构建的打包选项时,我得到一个 UnsatisfiedLinkError在运行时自 liblept.solibtess.so根本不包含在apk中。

    我怎样才能得到 liblept.solibtess.so只包含在 apk 中一次?

    最佳答案

    我想我找到了解决方案,但是,我不太明白。
    build.gradle两个模块 mylibrary 和 tess-two 的文件都包含一个定义

    android.sourceSets.main.jniLibs.srcDirs = ['libs']



    在 tess-two 中评论这个定义导致 libtess.soliblept.so仅被复制到 apk 一次。

    如果有人理解此解决方案,请发表评论或回答。

    编辑:

    与此同时,我找到了一个更好的解决方案:
    我将以下代码添加到我的主要应用程序 gradle.build 文件中:
    packagingOptions { // otherwise libtess.so and liblept.so are copied to apk twice resulting in an error
    pickFirst('lib/*/liblept.so')
    pickFirst('lib/*/libtess.so')
    }

    关于android - APK打包过程中文件重复或Android UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34155345/

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