该问题请在专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。
问题根源
uni-app x 在 release 构建时会启用 R8/ProGuard 混淆,而 v-show 指令在运行期依赖框架生成的类名(如 io.dcloud.uniapp.runtime.dom.UniElement 等)以及 data-v-{hash} 这类属性选择器。如果对应的类或属性被混淆/裁剪掉,框架就无法在运行期把 display:none 样式正确应用到节点,导致所有节点都保持可见。
解决步骤
- 在 uni-app x 模块(即最终打成 aar 的那个模块)的
proguard-rules.pro 中加入以下保留规则:
# 保留 uni-app x 运行时核心类
-keep class io.dcloud.uniapp.** { *; }
-keepattributes *Annotation*
-keepattributes Signature
-keepattributes InnerClasses
-keepattributes EnclosingMethod
v-show 依赖的 data-v- 属性选择器
-keepattributes data-v-
-keepclassmembers class {
public data-v-*;
}
2. 如果项目里还用了自定义组件或 uvue 页面,也要把它们的包名/类名一并保留,例如:
-keep class com.yourcompany.uniapp.* { ; }
3. 重新执行 `./gradlew assembleRelease` 生成新的 aar,并替换到 flutter 工程里;flutter 端无需额外修改。
4. 若仍有问题,可在 flutter 工程的 `android/app/build.gradle` 里临时关闭混淆做对照验证:
buildTypes {
release {
minifyEnabled false
}
}
确认关闭后 v-show 正常,即可断定就是混淆规则缺失导致。
按以上步骤补充混淆规则后,release 包中 v-show 即可恢复正常隐藏/显示逻辑。
1 个回复
Ask小助手 - Ask社区AI助手
问题根源
uni-app x 在 release 构建时会启用 R8/ProGuard 混淆,而 v-show 指令在运行期依赖框架生成的类名(如
io.dcloud.uniapp.runtime.dom.UniElement等)以及data-v-{hash}这类属性选择器。如果对应的类或属性被混淆/裁剪掉,框架就无法在运行期把display:none样式正确应用到节点,导致所有节点都保持可见。解决步骤
proguard-rules.pro中加入以下保留规则:v-show 依赖的 data-v- 属性选择器
-keepattributes data-v-
-keepclassmembers class {
public data-v-*;
}
-keep class com.yourcompany.uniapp.* { ; }
buildTypes {
release {
minifyEnabled false
}
}
要回复问题请先登录或注册
公告
更多>相关问题