技术小黑屋

修复 Flutter 项目中 xxx.kt: (19, 8): Redeclaration: xxxManager

在我们日常构建 Android app 包时,多少会遇到这样的问题

1
2
3
4
5
6
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.3/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (19, 8): Redeclaration: xxxManager
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.3/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (79, 12): Redeclaration: gogogoResult
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.3/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (82, 12): Redeclaration: gogogoListResult
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.4/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (21, 8): Redeclaration: xxxManager
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.4/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (94, 12): Redeclaration: gogogoResult
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.4/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (97, 12): Redeclaration: gogogoListResult

Mac 平台知名视频下载工具 Downie 4 买断仅需 79 元

Downie 4 是一款 Mac 上备受好评的视频下载利器,支持 Youtube、B 站、优酷、爱奇艺、腾讯视频 等 1000+ 国内外视频流媒体网站。

https://asset.droidyue.com/image/lizhi_io/downie/%E5%9B%BE1.png

点击[合作伙伴]专属优惠链接,下单 Downie 4 到手价只需 79 元,新注册用户再享立减 5 元优惠!


支持 1000+ 视频网站

从网站扒视频,最烦恼的就是工具不万能。部分站点轻松下载,另外的网站却不可用,大大拖慢效率……

在 Downie 4 下,这个问题几乎不存在。软件支持超过 1000 个视频站点,从 YouTube、TED、Vimeo,到爱奇艺、优酷、Bilibili、网易云音乐……基本上只要你用过的网站,它都能下载。

https://asset.droidyue.com/image/lizhi_io/downie/%E5%9B%BE2.png

Android Some Runtime JAR Files in the Classpath Have an Incompatible Version Kotlin 问题解决

在 Android 工程中,随着依赖包的引入,也会出现 多个 Kotlin 版本的问题,比如会有下面这样的警告信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 ] > Task :app:lintVitalAnalyzeRelease
[        ] w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.6.10/e80fe6ac3c3573a80305f5ec43f86b829e8ab53d/kotlin-stdlib-jdk8-1.6.10.jar (version 1.6)
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.7.10/1ef73fee66f45d52c67e2aca12fd945dbe0659bf/kotlin-stdlib-jdk7-1.7.10.jar (version 1.7)
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.7.10/d2abf9e77736acc4450dc4a3f707fa2c10f5099d/kotlin-stdlib-1.7.10.jar (version 1.7)
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.7.10/bac80c520d0a9e3f3673bc2658c6ed02ef45a76a/kotlin-stdlib-common-1.7.10.jar (version 1.7)
[        ] w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath
[  +98 ms] timber.lint.TimberIssueRegistry in /Users/xxxxxxxxx/.gradle/caches/transforms-3/d91983d38205de71b5c5d645c8d4eb47/transformed/jetified-timber-4.7.1/jars/lint.jar does not specify a vendor; see
IssueRegistry#vendor
[  +96 ms] e:
/Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.7.10/1ef73fee66f45d52c67e2aca12fd945dbe0659bf/kotlin-stdlib-jdk7-1.7.10.jar!/META-INF/kotlin-stdlib-jdk7.kotlin_modul
e: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.
[        ] e:
/Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.7.10/d2abf9e77736acc4450dc4a3f707fa2c10f5099d/kotlin-stdlib-1.7.10.jar!/META-INF/kotlin-stdlib.kotlin_module: Module was
compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.
[        ] e:
/Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.7.10/bac80c520d0a9e3f3673bc2658c6ed02ef45a76a/kotlin-stdlib-common-1.7.10.jar!/META-INF/kotlin-stdlib-common.kotlin
_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.

Flutter 3 迁移后编译 Warnings 一键修复

当我们的 app 支持 flutter 3 后,无论是编译速度,还是运行效率,方方面面会有很大的提升。但是在我们编译的时候,会有类似下面的这些警告。

1
2
3
../../../your_pub/lib/src/framework.dart:275:26: Warning: Operand of null-aware operation '!' has type 'SchedulerBinding' which excludes null.
[        ]  - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../code/flutter_3/packages/flutter/lib/src/scheduler/binding.dart').
[        ]     if (SchedulerBinding.instance!.schedulerPhase ==

上面的警告虽然不会影响应用的编译,但是长久来看,还是需要解决的。

正版软件优惠,近期新品软件推荐

不管是手机还是电脑,出色的硬件是好用的基础。而其中的软件工具,也是提高效率、减轻负担的好东西。

免费的软件工具众多,当然付费工具也不少。大家可能会觉得正版软件很贵,但国内软件代理商的价格其实很实惠。

本次为大家介绍,优秀代理商「数码荔枝」近期上架的多款软件工具。分别是多平台抠图工具:傲软抠图,以及无需剪辑的在线视频制作工具:右糖

点击我们的专属链接,直接购买即为优惠价格。


关于仓库的批量处理脚本,效率提升 500%

很多时候,我们会遇到这样的场景

  • 换了新电脑,需要挨个 clone gitlab repos?
  • 无法确定哪个 repo 包含了 maven.aliyun.com 这个设置?
  • 能否批量更新 本地的 repos?

如果你有上述的疑问或者情况,你可以尝试本文中的一些批量处理 repos 的方法

JetBrains 系列即将涨价,抓紧最后的好价入手!

对于开发者来讲,每天都要和各种编程 IDE 和开发工具打交道。想必一定听说过 JetBrains 公司,或旗下的产品:IntelliJ IDEAPyCharmWebStorm 等。

不久前,JetBrains 发布公告,他们即将上调系列产品的订阅价格!

https://asset.droidyue.com/image/lizhi_io/jetbrains/%E5%9B%BE1.png

涨价风暴将席卷旗下一众产品,包括:IDE、.NET 工具和 All Products Pack。

Unpub 发布原子化处理

目前 unpub 作为我们重要的 pub 私有服务托管着 众多的 pubs。在日常的开发过程中,我们也会对pub 做出了一些约束。比如

  • 只允许在 master 或者 release/* 分支发布
  • 不符合上述条件的分支不允许发布。

今天我们讨论的问题重点,非上述的问题,而是发布 unpub 的原子性。

使用 Flutter Attach 实现代码与应用进程关联

当我们使用 flutter run 调试 App 时,假如数据线接触不良或者断开,当我们想要继续调试的时候,可能就需要再次执行 flutter run

但其实,还有一个命令叫做 flutter attach. 它可以实现如下的功能

  • attach 到一个现在运行的 app
  • 支持指定设备 id 进行 attach
  • 支持指定端口进行 attach
  • 支持设置超时时间
  • 支持传递 key-value 键值对设置

Nexus Repo 503 错误解决

最近访问Nexus Repo 曝出了下面的503 问题

1
http://your_server:8081/nexus/content/repositories/xxxx/module/3.0.0/module-3.0.0.pom. Return code is: 503, ReasonPhrase:Service Unavailable. ->

尝试重新启动 Nexus Repo 服务也没有解决。

Flutter Webview 处理回退历史

在 App 开发中,我们总会遇到使用 WebView 的情况, 比如 我们打开了 网页A,然后点击 A 中的链接跳转到 B。如果这个时候,我们按一下系统的返回键,预期的应该是 返回A,而不是推到一个 Native 页面。

Linux 下解决 Grep Is Directory 问题

Grep 是一个很便捷有用的终端工具,它可以帮助我们快速过滤筛选出一些内容。通常配合 find 命令,可以实现更加强大的能力。

比如这个这样的组合,可以快速发现并定位到 哪个.gradle 文件包含 maven.aliyun.com 。

1
find . -name "*.gradle" | xargs grep -E -n --color=always "maven.aliyun.com"

但是我们在执行的时候,总会遇到这样的错误提示输出。

1
grep: ./example/android/.gradle: Is a directory

限时买一年送半年,618 国民级思维导图工具 XMind 2022 来袭!

提起思维导图,就不得不说 XMind,作为思维导图工具中的佼佼者,兼具丰富的导图模板、美观的配色方案、及多种创意工具。

无论是职场打工人、在校大学生,还是需要头脑风暴的创意工作者,掌握思维导图能帮你打破思路局限,养成结构思维。

XMind 2022 打磨的众多功能,都让理清思路、展现思维更上一层楼:

  • 模板、配色方案更智能;
  • 演说模式更自由;
  • 全新的贴纸、插画、手绘风格;
  • 优化了众多细节体验……

这次 618,数码荔枝迎来 XMind 2022 更新后的首次优惠大放送!

谁动了我的奶酪,通过 Git 找出内容变更历史

在日常的开发过程中,一段代码内容被添加,删除都是稀疏平常的事情。这也就造成了我们日常开发工作中会遇到这样两个问题

  • 这个代码内容是谁添加的,是一直存在还是被修改过多次
  • 有一段代码被删除了,是谁删除的呢

终端下 Git Diff 只展示文件名

通常我们使用git diff 可以查看具体的内容修改,默认会以patch的形式展示,但是有时候,我们仅仅是希望有一个修改的文件列表,不关心具体的修改内容。

这里完全可以借助 git diff 的一些指令来实现。

给「荔」一夏 618 正版软件大促,秒杀 + 折扣 + 满减一起来袭!

五月进入尾声,618 各种活动已经陆续开始了,又是年中采购,清空购物车的好机会。

除了可以买吃的、用的实物,趁 618 入手虚拟商品,如软件会员、正版授权码同样有巨多优惠,还不用担心快递因疫情延误,买完就能用。

https://asset.droidyue.com/image/lizhi_io/618_2022/%E5%9B%BE1.png

我们的朋友「数码荔枝」今年提前开启了 618 给「荔」一夏大促活动,让大家更早享受特价,和其他抢购不撞车。

Mac 下 终端也能生成二维码了

有些时候,我们需要将链接或者文本转换成 二维码,通常这时候我们会使用网上的在线服务进行处理,其实我们还可以做到更加简单,使用终端即可生成二维码。

这里,我们需要借助 Mac 下 homebrew 的一个库来实现,这个库的名字叫做 qrencode。下面就是关于 这个库的安装,封装,以及使用。

Flutter/Dart Release 模式下屏蔽 debugPrint 与 Print 输出

当我们在写 Flutter,Dart程序时,release 模式下,我们很奇怪的发现debugPrint和 print 这两个的输出内容,还是能够通过 flutter logs 展示出来。这一点尤其在端上暴露的问题要严重一些,比如涉及到一些敏感信息的日志打印。

本文,将会有两个超级简单的方法,来实现对这些输出的屏蔽,并且是专门治理 release 模式下的问题,debug 模式不受影响。

一个脚本,快速发现项目中的重复文件

项目中的文件越来愈多,导致生成的apk包也不断增大,可是这些文件中会不会存在重复的文件呢,这是一个值得验证的问题,毕竟解决了之后会减少很多apk的体积。

我们不可能依赖人工的手动查找,因为这样是时间成本太大。于是我们再次尝试使用脚本程序来实现检查项目中是否有重复文件。

Flutter 在 iOS 模拟器中运行卡住问题解决

当我们尝试在 iOS 模拟器运行 flutter run 可能会出现类似如下的卡住问题。

1
2
3
executing: xcrun simctl launch xxx-54F9-427F-8119-xxxx com.hahaha.app --enable-dart-profiling --enable-checked-mode --verify-entry-points --observatory-port=0
[+1000 ms] com.hahaha.app: 49573
[        ] Waiting for observatory port to be available

模拟器上的 App 也无法打开,也看不出有什么具体的崩溃问题。不知如何是好。

超快速实现 Svg 转 Png,jpg等格式

svg 是 用于描述二维矢量图形的图形格式,有着很多的优势,但是有时候并不是所有的场景都支持 svg,那么这时候,我们需要将svg 图片转换成 png 等格式。

当然,可以进行svg 转png 的方式有很多,比如通过在线的网页工具可以,也可以使用终端的命令处理。这里我们主要设计的使用终端命令进行转换处理。