已合并
fix: 修复andriod构建apk问题 #8
已合并
yangxichen创建于 6月18日
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 yangxichen 的贡献)
wuleilei
wuleilei
6月18日 评论:

已评审,无其他问题

likedislike
yangxichen
yangxichen
6月18日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
6月18日 评论:

该仓未配置门禁,无法触发构建。

likedislike
yangxichenyangxichen
6月18日 修改了pull request 的描述
cpf-manager
cpf-manager成员6月18日进行代码检视2
android/build.gradle
已过期
@@ -5,2 +5,3 @@
5- ext.kotlin_version = "1.7.10"
5+ ext.kotlin_version = "1.9.22"
66 repositories {
7+ maven { url 'https://maven.aliyun.com/repository/google' }
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【一般】【基础代码问题】【资源使用问题】Aliyun Maven 镜像硬编码到插件源码中

● 问题:在 android/build.gradle(buildscript 和 allprojects)、example/android/build.gradle、example/android/settings.gradle 中均硬编码了阿里云 Maven 镜像(maven.aliyun.com/repository/google、maven.aliyun.com/repository/public、maven.aliyun.com/repository/gradle-plugin)。这些镜像仅适用于中国大陆网络环境,对于海外开发者或 CI/CD 环境可能造成依赖解析延迟甚至失败。此外,阿里云镜像的同步存在滞后,可能无法及时获取最新发布的依赖版本。

● 影响:海外开发者构建时可能遇到依赖解析失败;如果该插件发布到 pub.dev,所有使用者都会被强制使用阿里云镜像,影响构建的稳定性和国际化兼容性。

● 建议:将阿里云镜像配置移至开发者本地的 ~/.gradle/init.gradle 中,而非硬编码到插件源码。如果确实需要在项目中保留,建议使用条件判断或 Gradle 属性控制,例如:

if (project.hasProperty('useAliyunMirror') && project.useAliyunMirror.toBoolean()) {
    maven { url 'https://maven.aliyun.com/repository/google' }
    maven { url 'https://maven.aliyun.com/repository/public' }
}
google()
mavenCentral()

这样开发者可以通过 -PuseAliyunMirror=true 按需启用,不影响其他用户。

likedislike
System
系统消息系统
6月18日 评论:

changed this line on 479552f4 view diff detail

cpf-manager
cpf-manager成员6月18日进行代码检视1
android/build.gradle
@@ -10,3 +12,3 @@
1012 
1113 dependencies {
12- classpath("com.android.tools.build:gradle:7.3.0")
14+ classpath("com.android.tools.build:gradle:8.3.0")
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【一般】【软件设计】【冗余重复代码】AGP 和 Kotlin 版本在两处重复声明,存在不一致风险

● 问题:AGP 版本(8.3.0)和 Kotlin 版本(1.9.22)同时在 android/build.gradle 的 buildscript 块和 example/android/settings.gradle 的 plugins 块中声明。当后续升级版本时,若只修改了一处而遗漏另一处,会导致版本冲突或构建失败。例如 android/build.gradle:14 中 classpath("com.android.tools.build:gradle:8.3.0") 与 example/android/settings.gradle:24 中 id "com.android.application" version "8.3.0" 是同一版本的不同声明方式。

● 影响:版本不一致时会导致难以排查的构建错误,且维护成本增加。

● 建议:使用 Gradle Version Catalog(gradle/libs.versions.toml)统一管理版本号,或在 android/build.gradle 中通过 ext 属性统一版本定义并在 settings.gradle 中引用。例如在插件根目录的 gradle.properties 中定义:

agpVersion=8.3.0
kotlinVersion=1.9.22

然后在 build.gradle 和 settings.gradle 中引用这些属性,确保版本一致性。

likedislike
cpf-manager
cpf-manager成员6月18日进行代码检视1
example/android/gradle.properties
@@ -1,0 +1,1 @@
1-org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
1+org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【建议】【基础代码问题】【稳定性问题】--add-opens 配置仅在 example 中添加,缺少对插件使用者的文档说明

● 问题:--add-opens JVM 参数仅在 example/android/gradle.properties 中添加,这是 AGP 8.x + Java 17+ 环境的必要配置。当其他开发者将此插件作为依赖集成到自己的 Flutter 项目中时,其宿主 App 也需要配置这些 --add-opens 参数,否则在使用 AGP 8.x 构建时会出现 InaccessibleObjectException 导致构建失败。当前 PR 没有在 README 或 CHANGELOG 中说明此升级对宿主项目的影响。

● 影响:使用此插件的开发者升级后可能在构建时遇到 Java 模块访问异常,且缺少文档指引排查方向。

● 建议:1) 在插件的 README 或 CHANGELOG 中说明升级到 AGP 8.3.0 后,宿主项目需要在 android/gradle.properties 中添加 --add-opens 参数;2) 可考虑在插件根目录下新增 android/gradle.properties 文件包含这些参数,Flutter 构建系统会自动合并到宿主项目中。

likedislike
yangxichenyangxichen
6月18日 强制推送  1 个提交:479552f4-fix: 修复andriod构建apk问题
cpf-manager
cpf-manager成员6月18日进行代码检视1
example/android/settings.gradle
@@ -22,1 +21,3 @@
22- id "org.jetbrains.kotlin.android" version "1.7.10" apply false
21+ id "com.android.application" version "8.3.0" apply false
22+ id "org.jetbrains.kotlin.android" version "1.9.22" apply false
23+}
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【致命】【基础代码问题】【代码逻辑错误】TAG名称格式与仓库实际TAG不一致

● 问题:README中所有TAG名称使用短横线格式 ohos-1.0.0(如 1.1.4-ohos-1.0.0-beta.1),但仓库中实际存在的TAG使用点号格式 ohos.1.0.0(如 1.1.4-ohos.1.0.0-beta.1)。仓库当前实际TAG列表为:1.4.0-ohos.1.0.0-beta.1、1.2.8-ohos.1.0.0-beta.1、1.1.4-ohos.1.0.0-beta.1。用户按照README中的TAG名称配置 ref: 将导致 flutter pub get 失败,因为指定的git引用不存在。同样,注释行 # ref: 1.1.4-ohos-1.0.0-beta.1 中的TAG名称也是错误的。

● 影响:致命。所有按照文档操作的用户都无法成功安装依赖,插件完全不可用。这是文档的核心功能——指导用户正确安装依赖——的根本性错误。

● 建议:将README中所有TAG名称从 ohos-1.0.0 修正为 ohos.1.0.0,与仓库实际TAG保持一致。具体修改:

  • 1.1.4-ohos-1.0.0-beta.1 → 1.1.4-ohos.1.0.0-beta.1
  • 1.2.8-ohos-1.0.0-beta.1 → 1.2.8-ohos.1.0.0-beta.1
  • 1.4.0-ohos-1.0.0-beta.1 → 1.4.0-ohos.1.0.0-beta.1
    同时修正注释行 # ref: 1.1.4-ohos-1.0.0-beta.1 为 # ref: 1.1.4-ohos.1.0.0-beta.1。
likedislike
cpf-manager
cpf-manager成员6月18日进行代码检视1
example/android/gradle.properties
@@ -1,0 +1,1 @@
1-org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
1+org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【建议】【基础代码问题】【性能和效率问题】--add-opens JVM 参数范围过大且仅在 example 中配置

● 问题: example/android/gradle.properties 第1行添加了多个 --add-opens 参数(java.io、java.lang、java.lang.invoke、java.util),这些参数仅配置在 example 应用的 gradle.properties 中,而非插件自身的 android/gradle.properties 中。虽然 --add-opens 主要影响编译和运行时,且对使用此插件的宿主 App 生效需要宿主项目自行配置,但此 PR 未在 README 或 CHANGELOG 中说明此变更及使用此插件的开发者需要做的适配。

● 影响: 建议。1)--add-opens 打开 java.lang 和 java.util 等核心模块的访问范围过大,存在不必要的模块开放,可能引入安全风险;2)使用此插件的第三方开发者升级后可能因缺少这些 JVM 参数而遇到 InaccessibleObjectException,但无文档说明。

● 建议: 1)缩小 --add-opens 的范围,仅开放 AGP 8.x 实际需要的模块。通常 AGP 8.x + Java 17 仅需 java.base/java.io 和 java.base/java.lang,可以移除 java.lang.invoke 和 java.util 的开放(除非实际构建中确实需要);2)在 README.md 中添加关于 AGP 8.3.0 升级的说明,告知使用此插件的开发者如果使用 Java 17+ 和 AGP 8.x,需要在自身项目的 gradle.properties 中添加相应的 --add-opens 参数;3)考虑在 CHANGELOG.md 中记录此版本升级(AGP 7.3.0→8.3.0、Kotlin 1.7.10→1.9.22、Gradle 7.6.3→8.4)。

likedislike
cpf-manager
cpf-manager成员6月18日进行代码检视1
android/build.gradle
@@ -21,4 +17,1 @@
21- }
22-}
23- 
2417apply plugin: "com.android.library"
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【一般】【基础代码问题】【稳定性问题】移除 allprojects 仓库块后缺少对插件使用者的兼容性说明

● 问题: 本次 PR 从 android/build.gradle 中移除了 allprojects { repositories { ... } } 块(第17-23行),并在 example/android/settings.gradle 中添加了 dependencyResolutionManagement 来替代。这是 AGP 8.x 的正确迁移方式。但此变更会影响到使用此插件的其他 Flutter 项目:如果宿主项目的 settings.gradle 未配置 dependencyResolutionManagement 或使用了 FAIL_ON_PROJECT_REPOS 模式,插件自身的 buildscript 依赖(如 kotlin-gradle-plugin:1.9.22)可能无法正确解析仓库。

● 影响: 一般。使用此插件且尚未迁移到 AGP 8.x 的旧项目,在升级插件后可能遇到构建失败,因为插件不再通过 allprojects 提供仓库配置,需要宿主项目自行保证仓库可用。

● 建议: 1)在 README.md 中添加 Android 构建要求说明,明确此插件需要 AGP 8.x+ 环境,以及宿主项目需确保仓库配置(google() 和 mavenCentral())在 settings.gradle 的 dependencyResolutionManagement 或 pluginManagement 中正确声明;2)考虑在插件的 android/build.gradle 的 buildscript 仓库中保留 google() 和 mavenCentral()(已有),确保插件自身的 classpath 依赖可以解析。

likedislike
cpf-manager
cpf-manager成员6月18日进行代码检视1
android/build.gradle
@@ -3,3 +3,3 @@
33 
44buildscript {
5- ext.kotlin_version = "1.7.10"
5+ ext.kotlin_version = "1.9.22"
cpf-manager
cpf-manager6月18日评论:

【AI-Review】【严重】【基础代码问题】【代码逻辑错误】Kotlin源码中 catch 块未返回错误结果,异常信息丢失

● 问题: 在插件 Kotlin 源码 ImageGallerySaverPlusPlugin.kt 中,saveImageToGallery 方法(约第140行)和 saveFileToGallery 方法(约第169行)的 catch (e: IOException) 块中创建了 SaveResultModel(false, null, e.toString()).toHashMap() 但缺少 return 语句。导致即使捕获到 IOException,代码仍继续执行到方法末尾的 return,此时 success 为 false,但 errorMessage 是通用的 "saveImageToGallery fail" 或 "saveFileToGallery fail",而非实际异常信息。

● 影响: 严重。当保存图片或文件发生 I/O 异常(如磁盘空间不足、权限被拒、存储不可用等),调用方仅收到通用错误信息,丢失了实际异常原因,严重影响问题排查和用户体验。

● 建议: 在两个方法的 catch 块中添加 return 语句:

} catch (e: IOException) {
    return SaveResultModel(false, null, e.toString()).toHashMap()
}

saveImageToGallery 和 saveFileToGallery 均需修复。

likedislike
yangxichen
yangxichen
6月18日 评论:

force_verify

likedislike
openharmony_ciopenharmony_ci成员
6月18日 通过测试
openharmony_ci
openharmony_ci成员
6月18日 评论:

添加 测试通过 成功!

likedislike
openharmony_ci
openharmony_ci成员
6月18日 评论:
程皖Orz程皖Orz成员
6月25日 通过审查
程皖Orz程皖Orz成员
6月25日 解决了最后一个问题
yangxichen
yangxichen
6月25日 评论:

submit

likedislike
程皖Orz
程皖Orz成员
7月1日 评论:

force_verify

likedislike
openharmony_ciopenharmony_ci成员
7月1日 通过测试
openharmony_ci
openharmony_ci成员
7月1日 评论:

添加 测试通过 成功!

likedislike
openharmony_ci
openharmony_ci成员
7月1日 评论:
yangxichen
yangxichen
7月8日 评论:

submit

likedislike
yangxichen
yangxichen
7月8日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
7月8日 评论:

该仓未配置门禁,无法触发构建。

likedislike
yangxichen
yangxichen
7月8日 评论:

force_verify

likedislike
openharmony_ciopenharmony_ci成员
7月8日 通过测试
openharmony_ci
openharmony_ci成员
7月8日 评论:

添加 测试通过 成功!

likedislike
openharmony_ciopenharmony_ci成员
7月8日 关闭了关联的issue
openharmony_ciopenharmony_ci成员
7月8日 合入了pull request,合并节点 SHA:4eecda777ddb8c31ac305627f85e6c617c0be574