Ошибка при создании собственной библиотеки jar для Android-проекта

В настоящее время я работаю над основами создания библиотеки jar в Android Studio.

Я последовал за Как сделать .jar из проекта Android Studio и как создать файл jar с android студия. И прошел каждый шаг, описанный в первом уроке.

Однако когда я создаю и запускаю этот проект библиотеки, он показывает мне следующую ошибку

Ошибка: выполнение выполнено для задачи ': app: preDexDebug'. com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C:\Program Files\Java\jdk1.8.0_60\bin\java.exe '' завершен с не- нулевое значение выхода 1

Я рассмотрел этот вопрос в SO, но эти вопросы мне совсем не помогли. Для меня это не проблема памяти, потому что все остальные приложения работают очень хорошо. Хотя мой проект полностью не скомпилировался, я получил файл библиотеки jar из моей библиотеки, и когда я импортирую эту банку в другой проект в качестве библиотеки, я получил такое же сообщение об ошибке.

Итак, я думаю, что у меня отсутствует ключевой момент. Если кто-то сталкивался с подобной проблемой или может помочь мне, пожалуйста, дайте свои предложения.

Если вы хотите, чтобы я опубликовал любой из моего кода, скажите мне, и я сделаю это, спасибо.

Я просто добавляю модуль библиотеки java и добавляю туда очень простой класс Multiplication (проверьте код ниже). Затем добавьте этот библиотечный модуль в качестве библиотеки в моем проекте. Код библиотеки

public class Multiplication {

    public double multiply(int num1, int num2){
        return num1*num2;
    }
}

Код действия

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    edt1 = (EditText)findViewById(R.id.et1);
    edt2 = (EditText)findViewById(R.id.et2);
    btn  = (Button)findViewById(R.id.btn);
    tv = (TextView)findViewById(R.id.tvRes);

    multiplication = new Multiplication();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            double res = multiplication.multiply(Integer.parseInt(edt1.getText().toString()),Integer.parseInt(edt2.getText().toString()));

            tv.setText(Double.toString(res));
        }
    });

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 11
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile files('D:/Work_New/MyApplication/libs/mylibjar.jar')
}

Полный журнал ошибок

Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:mylibjar:compileJava UP-TO-DATE
:mylibjar:processResources UP-TO-DATE
:mylibjar:classes UP-TO-DATE
:mylibjar:jar UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72221Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42221Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
    at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
    at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
    at com.android.dx.command.dexer.Main.processClass(Main.java:704)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:83)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
    at com.android.dx.command.dexer.Main.run(Main.java:246)
    at com.android.dx.command.dexer.Main.main(Main.java:215)
    at com.android.dx.command.Main.main(Main.java:106)
...while parsing com/MultiplicationTest/Multiplication.class
1 error; aborting
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe'' finished with non-zero exit value 1

Хотя он не показывает никаких ошибок при компиляции моего проекта, он показывает мне вышеупомянутую ошибку, о которой я упоминал.

Ответы

Ответ 1

Обновление 2

В соответствии с журналами вы создаете свой *.jar с помощью Java 1.8. Максимальная версия java, поддерживаемая Android, - 1,7. Таким образом, вы должны установить совместимость исходного кода с 1.7 и перестроить jar файл.

Если вы строите эту банку не из gradle (или Android Studio), вам нужно изменить версию JDK (Файл → Структура проекта → Местоположение SDK → Местоположение JDK).

Для модуля gradle см. "Обновление 1"


Обновление 1

Для вашего модуля java (из которого вы пытаетесь получить jar) поместите эти строки:

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7

Попробуйте поместить следующий код в ваши файлы gradle для модулей Android:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

Ответ 2

Причина ошибки "non-zero exit value 1" может быть разной.

1.Установите библиотеку и затем перестройте проект, чтобы проверить, работает он или нет.

2.Если он отлично работает, удалите параметр compile filetree из dependencies и перестройте его снова

dependencies {
compile 'com.android.support:appcompat-v7:22.2.1'
compile files('D:/Work_New/MyApplication/libs/mylibjar.jar')
}
  1. Если эта проблема все еще существует, создайте один простой проект и сначала импортируйте библиотеку jar в этот проект. Затем добавьте эти другие зависимости один за другим, чтобы выяснить проблему. Если проблема не повторяется снова, скопируйте все java файлы в этот новый проект. Следующая копия "image" хранится один за другим. Часто рисуемые файлы изображений приводят к этой проблеме "non-zero exit value 1"

Изменить: Также добавьте это внутри android{ вашей зависимости:

dexOptions {
    preDexLibraries = true
}

Ответ 3

В android вы не можете использовать .jar файлы в качестве библиотек из других андроид-проектов. вам нужно импортировать проект android как библиотеку и установить проект в lib-проект. Вы должны импортировать проект android-lib в каждый другой андроид-проект, в котором вы его используете.

Вот как это происходит в eclipse, я думаю, в Android Studio это аналогичный подход

Ответ 4

Я предполагаю, что у вас есть два проекта в вашем рабочем пространстве: 1) Проект приложения для Android (помечен в gradle файле как "применить плагин:" com.android.application ") 2) проект библиотеки java ( "применить плагин:" java ") и оба они связаны через файл settings.gradle.

Вы должны создать java-проект с помощью команды "сборка", которая затем выведет файл .jar в папку build/libs (это также можно сделать с помощью команды "jar" Gradle).

Возможно, вы можете опубликовать скриншот своей древовидной структуры в Android Studio за дополнительной помощью.

Ответ 5

Попробуйте импортировать свой модуль (java-библиотеку) следующим образом:

compile project(':MyLib');  // MyLib is a name of your module

Ответ 6

Я также получил ту же ошибку при создании моего решения для Android (имеет пару модулей java) с Java 1.8 SDK. наконец, я исправил его с помощью Gradle Плагин Retrolamdba

Добавьте нижеприведенный путь к файлу build.gradle в корневом проекте

classpath 'me.tatarka:gradle-retrolambda:3.2.4'

И подключаемый модуль retrolamdba к build.gradle, расположенный в модуле sub project/java (библиотека jar)

apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'