Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error while creating own jar library for Android project

Currently I am working on basics of how to create a jar library in Android Studio.

I followed How to make a .jar out from an Android Studio project and how to create a jar file from android studio tutorials. And went through each step described in the first tutorial.

However when I am buildig and running this library project it is showing me following error

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

I looked into this issue in SO but those questions didn't helped me at all. It is not memory issue for me because all other applications are running pretty fine. Though my project didn't compile perfectly still I got the library jar file from my library folder and when I import that jar in other project as library I got same error message.

So I think I am missing some key point here. If anybody faced similar problem or can help me out please gimme your suggestions.

If you want me to post any of my code then tell me and I will do that, Thanks.

I just add a java library module and add a very simple Multiplication class there( Check below code). Then add that library module as library in my project. Library Code

public class Multiplication {

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

Activity Code

@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')
}

Complete Error Log

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

Though it not showing any error when I am compiling my project it showing me the above error I mentioned.

like image 989
Kunu Avatar asked Sep 03 '15 10:09

Kunu


2 Answers

Update 2

According to logs you build your *.jar with Java 1.8. The max version of java that Android supports is 1.7. So you have to set source code compatability to 1.7 and rebuild the jar-file.

If you are building this jar not from gradle (or Android Studio) you need to change your JDK version (File -> Project Structure -> SDK Location -> JDK Location).

For gradle module see "Update 1"


Update 1

For you java module (from which you are trying to get jar) put these lines:

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

Try to put next code to your gradle files for Android modules:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
like image 86
Ilya Tretyakov Avatar answered Nov 05 '22 04:11

Ilya Tretyakov


Reason for "non-zero exit value 1" error may be different.

1.Delete the library and next rebuild the project to check if it is working or not.

2.If it is working fine remove compile filetree option from the dependencies and rebuild it again

dependencies {
compile 'com.android.support:appcompat-v7:22.2.1'
compile files('D:/Work_New/MyApplication/libs/mylibjar.jar')
}
  1. If this problem is still there, create one simple project and import the jar library first to this project. Next add these other dependencies one by one to find out the problem.If the problem is not occuring again, copy all java files to this new project. Next copy "image" files one after another. Often drawable image files causes this problem "non-zero exit value 1"

Edit: Also add this inside android{ of your dependency:

dexOptions {
    preDexLibraries = true
}
like image 1
N Kaushik Avatar answered Nov 05 '22 03:11

N Kaushik