为Android项目创build自己的jar库时出错

目前我正在研究如何在Android Studio中创buildjar库的基础知识。

我遵循如何从Android Studio项目 中创build .jar,以及如何从android studio教程中创build一个jar文件 。 并通过第一个教程中描述的每一步。

但是,当我buildig和运行这个库项目它显示我以下错误

错误:执行任务':app:preDexDebug'失败。 com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'命令'C:\ Program Files \ Java \ jdk1.8.0_60 \ bin \ java.exe'零出口值1

我在这个问题上研究了这个问题,但这些问题根本没有帮助我。 这对我来说不是内存问题,因为所有其他应用程序都运行得很好。 虽然我的项目还没有完全编译,我从我的库文件夹中获取库jar文件,当我在库中导入该jar在其他项目中,我得到相同的错误信息。

所以我想我在这里错过了一些关键点。 如果有人遇到类似的问题或可以帮助我,请给我你的build议。

如果你想我发布我的任何代码然后告诉我,我会这样做,谢谢。

我只是添加一个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 

虽然它在编译我的项目时没有显示任何错误,但却显示了我提到的上述错误。

Solutions Collecting From Web of "为Android项目创build自己的jar库时出错"

更新2

根据日志,您可以使用Java 1.8构build* .jar。 Android支持的最大版本是1.7。 所以你必须将源代码兼容性设置为1.7并重buildjar文件。

如果你不是从gradle(或者Android Studio)构build这个jar文件,你需要改变你的JDK版本(文件 – >项目结构 – > SDK位置 – > JDK位置)。

对于gradle模块,请参阅“更新1”


更新1

对于你的Java模块(从你试图得到jar)把这些行:

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

尝试把下一个代码放到Android模块的gradle文件中:

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

"non-zero exit value 1"错误的原因可能不同。

1.删​​除库,然后重新编译工程,检查工程是否正常。

2.如果工作正常,请从dependencies删除compile filetree选项,然后重新生成

 dependencies { compile 'com.android.support:appcompat-v7:22.2.1' compile files('D:/Work_New/MyApplication/libs/mylibjar.jar') } 
  1. 如果这个问题仍然存在,那么创build一个简单的项目并首先将jar库导入到这个项目中。 接下来,逐个添加这些其他依赖项以找出问题。如果问题不再发生,请将所有java文件复制到此新项目中。 接下来一个接一个复制"image"文件。 通常可绘制的图像文件导致这个问题"non-zero exit value 1"

编辑:也join这个android{你的依赖关系:

 dexOptions { preDexLibraries = true } 

在android中,你不能使用.jar文件作为来自其他android项目的库。 你必须导入android-project作为一个库,并将项目设置为一个lib项目。 您必须将android-lib-project导入到您正在使用的其他android-project中。

多数民众赞成在eclipse中,我猜在Android Studio中是一个类似的方法

我假设你目前有两个项目在你的工作区:1)Android应用程序项目(在gradle文件中标记为“apply plugin:'com.android.application'”)2)java库项目(“apply plugin:'java'”)他们都通过settings.gradle文件链接。

你应该可以通过“assemble”来构buildjava项目,然后在build / libs文件夹中输出一个.jar文件(这也可以通过Gradle的jar命令来完成)。

也许您可以在Android Studio中发布您的树结构的屏幕截图,以获取更多帮助。

尝试导入你的模块(一个Java库),像这样:

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

我也用Java 1.8 SDK构build我的android解决scheme(有几个java模块)时也遇到了同样的错误。 最后我用Gradle Retrolamdba Plugin修复了它

将下面的类path添加到根项目中的build.gradle文件

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

和retrolamdba插件到位于子项目/ java模块(jar库)的build.gradle中,

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