如何解决Android 6.0中无法编译出jar

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决Android 6.0中无法编译出jar相关的知识,希望对你有一定的参考价值。

1、将jar包放入项目里的libs文件夹中。
2、在project选中jar包点击右键"Add as library"。
3、这两步是网上比较容易找到的,但此时项目仍然是无法正常编译的,这时需要在项目的build.gradle文件里的dependencies节加入 dependencies

compile files('libs/android-support-v4.jar')
compile files('libs/xxxx.jar')

4、此时项目正常编译并运行了,但当自己的代码中真正创建了引用jar里的类实例时,有可能系统会抛出异常NoClassDefFoundError,这个时候可以按以下步骤操作:

 进入命令提示符窗口。
 定位到项目的根目录,即build.gradle所在的目录。
 运行 "android studio 安装目录\sdk\tools\templates\gradle\wrapper\gradlew.bat" clean
 重新编译运行项目
参考技术A 1、将jar包放入项目里的libs文件夹中。
2、在project选中jar包点击右键"Add as library"。
3、这两步是网上比较容易找到的,但此时项目仍然是无法正常编译的,这时需要在项目的build.gradle文件里的dependencies节加入 dependencies

compile files('libs/android-support-v4.jar')
compile files('libs/xxxx.jar')

4、此时项目正常编译并运行了,但当自己的代码中真正创建了引用jar里的类实例时,有可能系统会抛出异常NoClassDefFoundError,这个时候可以按以下步骤操作:

 进入命令提示符窗口。
 定位到项目的根目录,即build.gradle所在的目录。
 运行 "android studio 安装目录\sdk\tools\templates\gradle\wrapper\gradlew.bat" clean
 重新编译运行项目

如何解决 NoClassDefFoundError:Apache Commons Lang Android

【中文标题】如何解决 NoClassDefFoundError:Apache Commons Lang Android【英文标题】:How to solve NoClassDefFoundError: Apache Commons Lang Android 【发布时间】:2021-05-19 13:27:04 【问题描述】:

当我尝试使用 DateUtils.addMinutes() 时收到此异常:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.example.apprainha, PID: 7742
    java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:304)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.NoClassDefFoundError: org.apache.commons.lang3.-$$Lambda$Validate$XJJZURDO20sZXXyZMfTRRv13t2c
        at org.apache.commons.lang3.Validate.notNull(Validate.java:225)
        at org.apache.commons.lang3.time.DateUtils.validateDateNotNull(DateUtils.java:1789)
        at org.apache.commons.lang3.time.DateUtils.add(DateUtils.java:515)
        at org.apache.commons.lang3.time.DateUtils.addMinutes(DateUtils.java:472)
        at com.example.apprainha.threads.ExportaDados.exportCSVs(ExportaDados.java:187)
        at com.example.apprainha.threads.ExportaDados.doInBackground(ExportaDados.java:60)
        at com.example.apprainha.threads.ExportaDados.doInBackground(ExportaDados.java:33)
        at android.os.AsyncTask$2.call(AsyncTask.java:292)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
        at java.lang.Thread.run(Thread.java:818) 

我的代码正在调用 DateUtils.addminutes() 以向变量 date 添加 1 分钟,如下所示:

Date target = DateUtils.addminutes(date, 1);

我将正确的依赖项放在我的 Gradle 文件中:

implementation 'org.apache.commons:commons-lang3:3.11'

我对这个错误进行了很多研究,但其他帖子中提到的解决方案都没有解决我的问题。我该如何解决?

【问题讨论】:

【参考方案1】:

将您的成绩文件更改为:

implementation 'org.apache.commons:commons-lang3:3.6'

然后你可以在你的类中使用这个导入:

import org.apache.commons.lang3.StringUtils;

【讨论】:

作为记录,我将 Gradle 上的 Apache Commons 版本从 3.11 更改为 3.6,就像 @saon_srabon 推荐的那样。此更改解决了问题。

以上是关于如何解决Android 6.0中无法编译出jar的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 怎么添加使用第三方jar包及无法编译的问题解决方法

Android 11使用Android Studio调试系统应用:编译Settings 模块解决编译错误

如何为 Android 库项目创建 jar

Unity在Android 6.0及以上版本弹出权限申请窗口的问题

android反编译odex文件

如何用maven把依赖的jar包编译到最终生成的jar包中