Logo

site icon技术小黑屋

89年出生的保定人在北京,Android 工程师, Infoq译者。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

技术小黑屋 RSS 预览

Could not create task ':generateDebugRFile' 问题小记

2024-11-03 00:49:00

前段时间,处理一个比较旧的 flutter plugin,涉及到 Android 的部分,一顿修改后,发现无法 gradle sync 成功。 报错如下,

1
2
3
4
5
6
7
8
9
10
Could not create task ':generateDebugRFile'.
Cannot use @TaskAction annotation on method IncrementalTask.taskAction$gradle_core() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.

* Try:
> Run with --debug option to get more log output.
> Run with --scan to get full insights.

* Exception is:
com.intellij.openapi.externalSystem.model.ExternalSystemException: Could not create task ':generateDebugRFile'.
Cannot use @TaskAction annotation on method IncrementalTask.taskAction$gradle_core() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.

根据分析上面的错误信息,判定与 gradle 有关,和修改的 kotlin 代码无关。

经过一些简短尝试,最终确定是 gradle 版本不匹配的问题(主要由这一句推断 because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.)。

原因与解法

  • 原因为 Android Gradle Plugin 与 gradle 不匹配。
  • 可以修改 gradle plugin 版本,也可以修改 gradle 版本。

修改 AGP 版本

classpath ‘com.android.tools.build:gradle:7.1.2’ // The Android Gradle plugin.

修改 gradle 版本

修改gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip

修改成(或者对应的gradle 版本) distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip

如何确定 AGP 与 gradle 对应关系

查询,请访问 这里 https://developer.android.com/build/releases/gradle-plugin?#updating-gradle



Android 模拟器实现 hosts 修改

2023-03-12 20:50:00

有时候我们需要使用 Android 模拟器来 绑定一下 hosts 来实现功能的开发与验证,刚好最近遇到了这样的需求,处理完成,简单记录一下。

替换m1 实现(针对 苹果 M1 芯片才需要处理)

下载这个文件 https://github.com/google/android-emulator-m1-preview/releases/download/0.2/emulator-darwin-aarch64-0.2-engine-only.zip

解压,然后将 emulatoremulator-check 替换掉这里面的文件 ~/Library/Android/sdk/tools/ (原有的可以备份为 xxx_backup)

查看 avd_id

1
2
3
4
5
6
7
~/Library/Android/sdk/tools/emulator -list-avds
Pixel6ProAPI33
Pixel_3a_API_33_arm64-v8a
Pixel_6_API_22
Pixel_6_API_28
Pixel_6_Pro_API_23
Pixel_6_Pro_API_30_X86

启动 avd,可写入状态

1
~/Library/Android/sdk/tools/emulator -avd Pixel_3a_API_33_arm64-v8a  -writable-system

新起终端tab 执行

  1. adb root
  2. adb remount
  3. adb push your_hosts_on_mac /etc/hosts

验证ping

假设上面的 hosts 我们新增了 127.0.0.1 baidu.com

1
2
3
4
5
6
adb shell

ping baidu.com
PING baidu.com (127.0.0.1) 56(84) bytes of data.
64 bytes from baidu.com (127.0.0.1): icmp_seq=1 ttl=64 time=1.55 ms
64 bytes from baidu.com (127.0.0.1): icmp_seq=2 ttl=64 time=0.180 ms

注意: hosts 修改建议在 mac 上进行处理,然后使用adb push your_hosts_on_mac /etc/hosts 替换手机内的hosts。手机内置的 vi 很弱,可能无法编辑。

以上。



Vs Code 快速实现 重写 方法

2023-02-12 20:20:00

作为一个从 Android Studio/IntelliJ 切到 VS code 的开发者,一开始会遇到各种不适应的情况。 比如快捷键不一样,使用习惯不一样等。

这里将简单记录一下 个人遇到的一些痛点,比如如何重写方法。

在 Android Studio/ IntelliJ 中,使用起来很简单,比如弹出这个菜单,选择 Override Methods 即可,实现重写 initState 方法

https://asset.droidyue.com/image/2023/h1/as_intellij_override_methods.png

但是切到 Vs Code 后,发现找不到快捷键,后来经过一些摸索,还是找到了 如何快速实现方法重写的方法。

如下图,只需要输入待重写的方法的首字母,即可弹出提示。

https://asset.droidyue.com/image/2023/h1/vscode_override_method.png

VS Code 的方式显得会更加的简单。(后来才发现同样的方式 在 Android Studio/Intellij 也支持,Orz)



Merge(Pull) Request 推荐的标签列表

2022-11-27 21:35:00

一个Merge Request 的 阶段

  1. 代码添加或修改,需要进行review
  2. 代码review结束,需要修改
  3. 重复步骤1和步骤2,直到达到可以合并的标准

角色

  • MR submitter 负责提交Merge Request,并针对review做修改
  • MR reviewer 负责review Merge Request,提出MR中存在的问题,该角色可以对应多个人
  • MR dispatcher 负责分发MR,修改或增加MR reviewer
  • MR terminator 最终负责MR结果走向的人,比如合并或者关闭

注意

  • 上述角色至少需要两个人
  • 因权限问题, MR reviewer 可能无权限合并该MR

有哪些标签

MR:Needs Review(MR:需要Review)

  • 当MR创建或者进行了更新,需要人员Review时,MR submitter 设置该标签
  • 如果MR对应的内容不需要跟版,不需要现在合并的,不要增加该Lable
  • 如果一个MR,当前的label不包含MR:Needs Review,MR reviewer 则不会review

MR:Reviewed With Comments(MR:需要修改)

  • MR reviewer 进行了review,并提出了一些评论来记录发现的问题和疑问
  • MR reviewer 移除 MR:Needs Review 并添加标签 MR:Reviewed With Comments
  • MR submitter 根据提出的问题和疑问进行修改或回答,当修改完毕后,移除标签 MR:Reviewed With Comments,并设置MR:Needs Review

Good to Merge(可以合并)

  • 经过上面的来回操作,在某一点,MR达到了一个可以合并的时候,这时候需要移除前面的标签,设置成Good to Merge
  • 设置这个标签,需要由MR reviewer 操作,而不是MR submitter
  • 设置完这个标签后,MR不需要再更新
  • 因MR reviewer不一定有merge权限,这一标签还是有必要的

Do Not Merge(请勿合并)

  • 禁止合并标签,该MR可以被 review,但是不要合并进来.
  • 适用于未来的需求,目前尚不需要加入到主分支
  • 辅助标签,更加明确表明不需要合并当前MR

待验收

  • 该功能没有开始进行验收(测试,UI,UE,产品,数据等)
  • 如果当前MR包含待验收,通常不会被合并

验收中

  • 该功能正在处于验收中(测试,UI,UE,产品,数据等)
  • 如果当前MR包含该标签,通常不会被合并

验收通过

  • 该功能已经通过验收(测试,UI,UE,产品,数据等)
  • 如果当前MR包含验收通过,可以进行合并

BugFix

  • 仅用于修复线上版本的崩溃提交时,使用

可能不上线

  • 有些MR已经完成,但不确定什么版本引入,需要增加该标签

技术需求



中国特惠!多平台广告屏蔽专家 AdGuard 买断仅需 119 元起

2022-11-27 21:23:00

网络垃圾广告令人深恶痛绝,它不仅浪费流量、拖慢设备性能,还存在诸多安全隐患!所以很多用户选用 AdGuard 来对付这种「数字牛皮癣」。

image alt

点击[合作伙伴]专属优惠链接,前往数码荔枝下单 AdGuard 终生版最低仅需 119 元,新注册用户再享受立减 5 元优惠!

全方位广告拦截

为了应对无孔不入的垃圾广告,大家也许已经尝试过不少工具。

目前大多数的广告拦截工具仅支持电脑网页端,同时因为技术问题,往往需要逐个浏览器单独配置,最后效果还很一般 (比如面对反屏蔽脚本时无能为力)。

image alt

AdGuard 不仅内置防反屏蔽功能,同时支持 Win、Mac、安卓、iOS 四大主流系统,而且一经启用,无须额外配置即可在系统内生效!

AdGuard 还可以通过屏蔽垃圾信息,净化网页和软件,让页面更快完成载入,有效节省带宽流量和系统性能。

以视频播放前的贴片广告为例,这类可恶的广告,短则几十秒,长则数分钟!非常浪费时间。

image alt

在安装 AdGuard 并启动后,用户再通过浏览器浏览视频,就能享受如同 B 站一般,无广告直接播放的畅快体验 (屏蔽功能不支持国内部分网站和 App)。

image alt

以搜索同一个常见疾病为例,在没有拦截广告时,搜索结果通常会置顶多条广告信息。在开启拦截后,搜索结果会清爽得多。

image alt

赶快点击[合作伙伴]专属优惠链接购买 AdGuard 畅享无广告的清爽体验,终生版仅需 119 元起!

隐私与保护

无论是大人还是小孩,如今每天接触互联网的时间越来越多。怎样保护个人隐私,怎样让孩子时刻远离危险网站,正困扰着无数人。

除了过滤广告,AdGuard 还提供了「隐形模式」等功能,可以帮助用户远离成千上万的在线跟踪器,保护用户的数据免受网络分析:

image alt

它能通过隐藏搜索记录、User-Agent 以及阻止网站通过 Cookie、IP 地址等信息追踪到你,实现对个人信息的有效保护。

AdGuard 还内置了 DNS 保护、危险网站警告、家长控制等功能来为用户保驾护航。当用户即将进入钓鱼、欺诈或恶意网站时,AdGuard 会向用户发出警告。

image alt

利用家长控制功能,简单操作就能建立黑白名单,设定允许和禁止访问的网站,配合阻止下载可执行文件的功能,切实避免小朋友接触到有害的网站 / 文件。

image alt

实用扩展功能

AdGuard 一大特色在于它提供了强大的可扩展性,通过快速迭代且持续不断的「进化」来切实保护你的网络安全:

  • AdGuard 助手:网页悬浮球帮你管理过滤选项;
  • 弹窗拦截器:拦截烦人的网页弹窗广告;
  • Web of Trust:检测网页的信誉度来判断是否安全;
  • AdGuard Extra:应对常规广告拦截规则无效的复杂情况……

image alt

AdGuard 是一款少见的,能同时在广告拦截和网络安全上有着亮眼表现的工具,它在扩展功能上的持续开发更显示出了十足的诚意。

如果你需要一款支持多系统 + 全局广告拦截 + 个人隐私保护 + 儿童安全浏览 + 丰富扩展功能的工具,可以选择的大概只有 AdGuard 了!

它是超级聪明的广告屏蔽专家,更是值得信赖的安全防护墙!

马上点击[合作伙伴]专属优惠链接,AdGuard 终生版最低仅需 119 元!新注册用户再享受立减 5 元优惠,心动不如行动,马上入手吧!