【问题标题】:Android: INSTALL_FAILED_NO_MATCHING_ABIS with Javascript files under /lib folder in .JAR fileAndroid:INSTALL_FAILED_NO_MATCHING_ABIS 与 .JAR 文件中 /lib 文件夹下的 Javascript 文件
【发布时间】:2019-09-19 16:03:19
【问题描述】:

我正在构建一个可能在 Android 应用程序中使用的库模块。在代码的某个部分,我需要加载一个 JavaScript 文件,以便脚本引擎运行它。我的文件结构如下所示:https://i.snag.gy/R7hHPI.jpg

└───src
    ├───main
    │   ├───java
    │   │   └───calegari
    │   │       └───murilo
    │   │           └───qacadscrapper
    │   │               │   QAcadScrapper.java
    │   │               │
    │   │               └───utils
    │   │                       Grade.java
    │   │                       Subject.java
    │   │                       User.java
    │   │
    │   └───resources
    │       └───lib
    │               Barrett.js
    │               BigInt.js
    │               RSA.js
    │
    └───test
        ├───java
        │   └───calegari
        │       └───murilo
        │           └───qacadtest
        │                   QAcadTest.java
        │
        └───resources

在构建工件时,我对其进行了配置,以便 IntelliJ 将 /resources 文件夹的内容放在 Jar 文件的根文件夹中: https://i.snag.gy/fN4z6t.jpg

这些是 .jar 文件的内容:https://i.snag.gy/QPR9XK.jpg

├───calegari
│   └───murilo
│       └───qacadscrapper
│           └───utils
├───com
│   └───sun
│       └───script
│           ├───javascript
│           └───util
├───javax
│   └───script
├───lib ---> Here are the JavaScript files
├───META-INF
│   ├───maven
│   │   └───org.jsoup
│   │       └───jsoup
│   └───services
├───org
│   ├───jsoup
│   │   ├───helper
│   │   ├───internal
│   │   ├───nodes
│   │   ├───parser
│   │   ├───safety
│   │   └───select
│   └───mozilla
│       ├───classfile
│       └───javascript
│           ├───annotations
│           ├───ast
│           ├───commonjs
│           │   └───module
│           │       └───provider
│           ├───debug
│           ├───jdk13
│           ├───jdk15
│           ├───json
│           ├───optimizer
│           ├───regexp
│           ├───resources
│           ├───serialize
│           ├───tools
│           │   ├───debugger
│           │   │   └───treetable
│           │   ├───idswitch
│           │   ├───jsc
│           │   ├───resources
│           │   └───shell
│           ├───typedarrays
│           ├───v8dtoa
│           ├───xml
│           └───xmlimpl
└───sun
    ├───misc
    ├───reflect
    └───security
        ├───action
        └───util

但是当我尝试安装 APK 时,我收到“INSTALL_FAILED_NO_MATCHING_ABIS”错误。我很确定是 /lib 下的这些 .js 文件造成的,因为如果我从 .jar 构建中删除它们,错误就会消失。

库是使用 Gradle 配置的。

如何避免此错误?希望有人能帮忙!

更新

我让 IntelliJ 在我的 jar 包中的 Java 文件旁边添加了 .js 文件,从 .jar 文件运行时它可以工作,但是如果我尝试在 IntelliJ 中运行一些测试它就不起作用,因为 gradle 不是t 将文件添加到编译后的代码中...

解决方案

我能够通过将文件移动到源路径内并将其添加到 gradle.build 文件中来使其工作:

sourceSets {
    main {
        java {
            srcDirs = ['src/main/java']
        }
        resources {
            srcDir 'src/main/java'
            include '**/*.js'
        }
    }

    test {
        java {
            srcDirs = ['src/test/java']
        }
    }
}

【问题讨论】:

    标签: android jar android-gradle-plugin


    【解决方案1】:

    我在使用 bitcoinJ 库 (org.bitcoinj:bitcoinj-core:0.14.7) 添加到 build.gradle(in module app) 时遇到了这个问题,这是 android 范围内的一个打包选项。它帮助了我。

    android {
        ...
        packagingOptions {
        exclude 'lib/x86_64/darwin/libscrypt.dylib'
        exclude 'lib/x86_64/freebsd/libscrypt.so'
        exclude 'lib/x86_64/linux/libscrypt.so'
        }
    }
    

    【讨论】:

    • 我尝试使用 `exclude /lib/RSA.js' 和所有其他 .js 文件,但没有成功...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多