关于安卓greendao打包时报错问题修复
背景
项目在使用greendao的时候,debug安装没有问题,一到打包签名就报了。
环境
win10
jdk17
gradle8+
项目依赖情况
博主的greendao是一个独立的module项目,项目目前只适配了java,不支持Kotlin。然后被外部集成。greendao版本3.0.0。主项目和其他module都是Kotlin+Java混合环境。
问题集合
问题一
> Could not create task ':libpersistence:greendaoPrepare'.> Cannot use @TaskAction annotation on method DetectEntityCandidatesTask.execute() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.
在编译的过程,gradle报错,提示task错误。
解决方法:
在项目根部build.gradle文件,添加一下代码
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.1'
具体添加位置如下图:
这样就能正常进行gradle编译了。
问题二
FAILURE: Build completed with 2 failures.1: Task failed with an exception.
-----------
* What went wrong:
A problem was found with the configuration of task ':libpersistence:greendao' (type 'DefaultTask').- Gradle detected a problem with the following location: 'E:\workstation\android\clawclaw\clawclaw\libpersistence\src\main\java'.Reason: Task ':libpersistence:kaptGenerateStubsReleaseKotlin' uses this output of task ':libpersistence:greendao' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.Possible solutions:1. Declare task ':libpersistence:greendao' as an input of ':libpersistence:kaptGenerateStubsReleaseKotlin'.2. Declare an explicit dependency on ':libpersistence:greendao' from ':libpersistence:kaptGenerateStubsReleaseKotlin' using Task#dependsOn.3. Declare an explicit dependency on ':libpersistence:greendao' from ':libpersistence:kaptGenerateStubsReleaseKotlin' using Task#mustRunAfter.For more information, please refer to https://docs.gradle.org/8.9/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
==============================================================================
这个错误很诡异,按照官方issus,是很难解决的,如果你的greendao模块,原本只支持Java编译。得按以下的步骤进行解决。
(一)对module进行kotlin支持
这个无可厚非的,很简单的配置一下就好了,我目前的kotlin版本是1.9.25,gradle是8.5,配置一下就好了。选中Module中的build.gradle文件,先apply一下Kotlin安卓支持,代码截图如下:
plugins {id 'com.android.library'id 'kotlin-android'id 'kotlin-kapt'id 'org.greenrobot.greendao'
}
然后引入依赖:
"androidx.core:core-ktx:1.7.0"
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.10"
上述版本与你们实际版本可能存在差异,但是博主这个版本是实测过的,可以正常打包,具体的版本,应该配合gradle来决定,不能一概而论。
最后,在模块builde.gradle底部增加如下命令的配置:
//适用于greendao打包报错
tasks.configureEach { task ->if (task.name.matches("\\w*compile\\w*Kotlin")) {task.dependsOn('greendao')}if (task.name.matches("\\w*kaptGenerateStubs\\w*Kotlin")) {task.dependsOn('greendao')}if (task.name.matches("\\w*kapt\\w*Kotlin")) {task.dependsOn('greendao')}
}
上述配置的思路,其实就是为了适配kotlin与java混合打包过程中,一些Kotlin编译与Java差异化的一种兼容手段。
配置完上面代码后,就可以正常运行了。
最后,放出greendao模块中,build.gradle文件的全部代码
plugins {id 'com.android.library'id 'kotlin-android'id 'kotlin-kapt'id 'org.greenrobot.greendao'
}android {namespace 'com.north.light.libpersistence'compileSdkVersion rootProject.ext.android.compileSdkVersionbuildToolsVersion rootProject.ext.android.buildToolsVersiondefaultConfig {minSdkVersion rootProject.ext.android.minSdkVersiontargetSdkVersion rootProject.ext.android.targetSdkVersionversionCode rootProject.ext.android.versionCodeversionName rootProject.ext.android.versionName}buildTypes {release {minifyEnabled falseconsumerProguardFiles 'proguard-rules-lib-greendao.pro'}pre {minifyEnabled falseconsumerProguardFiles 'proguard-rules-lib-greendao.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_17targetCompatibility JavaVersion.VERSION_17}buildFeatures{buildConfig = true}
}greendao {// 指定数据库schema版本号,迁移等操作会用到schemaVersion 1// 设置生成数据库文件的目录,默认是在build中,可以将生成的文件放到我们的java目录中targetGenDir 'src/main/java'// 设置生成的数据库相关文件的包名,默认为entity所在的包名daoPackage 'com.north.light.libpersistence.gen'
}dependencies {api rootProject.ext.dependencies["kotlin"]api rootProject.ext.dependencies["kotlin-stdlib"]api project(":libcommonresp")implementation 'org.greenrobot:greendao:3.3.0'
}//适用于greendao打包报错
tasks.configureEach { task ->if (task.name.matches("\\w*compile\\w*Kotlin")) {task.dependsOn('greendao')}if (task.name.matches("\\w*kaptGenerateStubs\\w*Kotlin")) {task.dependsOn('greendao')}if (task.name.matches("\\w*kapt\\w*Kotlin")) {task.dependsOn('greendao')}
}
that’s all-----------------------------------------------------------------------------------
相关文章:

关于安卓greendao打包时报错问题修复
背景 项目在使用greendao的时候,debug安装没有问题,一到打包签名就报了。 环境 win10 jdk17 gradle8 项目依赖情况 博主的greendao是一个独立的module项目,项目目前只适配了java,不支持Kotlin。然后被外部集成。greendao版本…...

Ansible自动化运维实战--通过role远程部署nginx并配置(8/8)
文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件(金甲模板)5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中,使用角色(Role)来远程部…...

RGB 转HSV空间颜色寻找色块
文章目录 前言一、绿色确定二、红色确定总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 将RGB颜色空间转换为HSV颜色空间以寻找颜色,主要基于以下几个原因: 直观性: HSV颜色空间更符合人类…...

Spring Boot - 数据库集成04 - 集成Redis
Spring boot集成Redis 文章目录 Spring boot集成Redis一:redis基本集成1:RedisTemplate Jedis1.1:RedisTemplate1.2:实现案例1.2.1:依赖引入和属性配置1.2.2:redisConfig配置1.2.3:基础使用 2&…...

C++红黑树详解
文章目录 红黑树概念规则为什么最长路径不超过最短路径的二倍?红黑树的时间复杂度红黑树的结构插入叔叔节点情况的讨论只变色(叔叔存在且为红)抽象的情况变色单旋(叔叔不存在或叔叔存在且为黑)变色双旋(叔叔不存在或叔叔存在且为黑…...
与机器学习相关的概率论重要概念的介绍和说明
概率论一些重要概念的介绍和说明 1、 试验 (1)试验是指在特定条件下,对某种方法、技术、设备或产品(即,事物)进行测试或验证的过程。 (2)易混淆的概念是,实验。实验&…...
60.await与sleep的原理分析 C#例子 WPF例子
在异步任务中使用Thread.Sleep会阻塞当前线程,因其是同步操作,暂停线程执行而不释放资源。这与异步编程旨在避免线程阻塞的目的相冲突。尽管异步方法可能包含其他await调用,Thread.Sleep仍会立即阻塞线程,妨碍其处理其他任务或响应…...
数据库连接池是如何工作的?
连接池是一种用于管理和复用连接(如数据库连接或网络连接)的技术,广泛应用于数据库操作和网络请求中,以提高应用程序的性能和资源利用率。以下是连接池的工作原理和机制的详细解释: 连接池的工作原理 1. 初始化阶段 在应用程序启动时,连接池会根据配置参数预先创建一定…...

2025年01月26日Github流行趋势
项目名称:onlook 项目地址url:https://github.com/onlook-dev/onlook项目语言:TypeScript历史star数:4871今日star数:207项目维护者:Kitenite, drfarrell, iNerdStack, abhiroopc84, apps/dependabot项目简…...

C语言的灵魂——指针(1)
指针是C语言的灵魂,有了指针C语言才能完成一些复杂的程序;没了指针就相当于C语言最精髓的部分被去掉了,可见指针是多么重要。废话不多讲我们直接开始。 指针 一,内存和地址二,编址三,指针变量和地址1&#…...
vue2和vue3指令
Vue 2 和 Vue 3 的指令系统非常相似,但 Vue 3 在指令方面进行了优化和扩展。以下是 Vue 2 和 Vue 3 中指令的对比: 1. 通用指令 这些指令在 Vue 2 和 Vue 3 中都可以使用,功能一致: 指令说明v-bind绑定 HTML 属性或组件 propsv-…...

【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报
本文章介绍,Logstash进行自动采集服务器日志文件,并手把手教你如何在springboot项目中配置logstash进行日志自动上报与日志自定义格式输出给logstash。kibana如何进行配置索引模式,可以在kibana中看到采集到的日志 日志流程 logfile-> l…...

微信阅读网站小程序的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
通过配置核查,CentOS操作系统当前无多余的、过期的账户;但CentOS操作系统存在共享账户r***t
通过配置核查,CentOS操作系统当前无多余的、过期的账户;但CentOS操作系统存在共享 核查CentOS操作系统中的用户账户,可以使用以下命令: 查看当前活跃用户: awk -F: /\$1\$/{print $1} /etc/shadow 查看多余账户(非活跃账户&…...
Vue 3 30天精进之旅:Day 05 - 事件处理
引言 在前几天的学习中,我们探讨了Vue实例、计算属性和侦听器。这些概念为我们搭建了Vue应用的基础。今天,我们将专注于事件处理,这是交互式Web应用的核心部分。通过学习如何在Vue中处理事件,你将能够更好地与用户进行交互&#…...
.NET Core跨域
CORS 跨域通讯的问题。解决方案:JSONP、前端代理后端请求、CORS等。CORS原理:在服务器的响应报文头中通过access-control-allow-origin告诉浏览器允许跨域访问的域名。在Program.cs的“var appbuilder.Build()”这句代码之前注册 string[] urls new[] …...
笔试-二维数组2
应用 现有M(1<M<10)个端口组,每个端口组是长度为N(1<N<100),元素均为整数。如果这些端口组间存在2个及以上的元素相同,则认为端口组可以关联合并;若可以关联合并,请用二位数组表示输出结果。其中…...
vue中使用jquery 实现table 拖动改变尺寸
使用 CDN , 降低打包文件的大小在index.html中 <script src"https://.../cdns/jquery-1.12.4.min.js"></script>在 Vue 中使用 jQuery 一旦你引入 jQuery,你可以在 Vue 实例中使用它。有两种主要方式: 1. 使用全局变量 $ jQue…...

使用ensp进行ppp协议综合实验
实验拓扑 实验划分 AR1的Serial3/0/0接口:192.168.1.1/24; AR2的Serial3/0/0接口:192.168.1.2/24; AR2的Serial3/0/1和4/0/0的聚合接口:192.168.2.2/24; AR3的Serial3/0/0和3/0/1的聚合接口:192…...
什么是AGI
AGI(Artificial General Intelligence,人工通用智能)是指具备与人类相当或超越人类水平的通用智能的人工智能系统。与当前主流的**狭义人工智能(Narrow AI)**不同,AGI 能够像人类一样灵活地处理各种任务&am…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...

vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...

智能照明系统:具备认知能力的“光神经网络”
智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...