Android: INSTALL_FAILED_NO_MATCHING_ABIS с файлами Javascript в папке / lib в файле .JAR - PullRequest
0 голосов
/ 01 мая 2019

Я создаю библиотечный модуль, который может быть использован в приложении 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».Я почти уверен, что причиной этого являются файлы .js из / lib, поскольку ошибка исчезает, если я удаляю их из сборки .jar.

Библиотека настраивается с помощью Gradle.

Как я могу избежать этой ошибки?Надеюсь, что кто-то может помочь!

Обновление

Я заставил IntelliJ добавить файлы .js вместе с файлами Java внутри моего пакета jar, он будет работать при запуске из файла .jar, но если я попытаюсьзапустить некоторые тесты в IntelliJ, это не работает, так как gradle не добавляет файлы в скомпилированный код ...

Решение

Мне удалось заставить его работать, перемещая файлывнутрь исходного пути и добавьте его в файл gradle.build:

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

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

1 Ответ

0 голосов
/ 01 мая 2019

У меня возникла эта проблема с использованием библиотеки bitcoinJ (org.bitcoinj: bitcoinj-core: 0.14.7), добавленной в build.gradle (в модуле 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'
    }
}
...