新接入荣耀 SDK,混淆出包,登录提示框显示不全

荣耀联运客户端 SDK 刚出来不就,看文档第一个对外版本也就是 2023 年 8 月,所以最近开始接入,中间也遇到了一些麻烦折腾了不少时间。

什么意思呢

正常的登录提示 UI 是这样的,能够完整的显示 UI 部分(此前是通过定制化混淆出包)

新接入荣耀 SDK,混淆出包,登录提示框显示不全_第1张图片

错误的登录提示 UI 是这样的,显示一小部分,提示语都不完整

在这里插入图片描述

怎么排查问题

1、和荣耀技术沟通(沟通未果,对方也需要时间排查,但我们着急出包啊~)
2、质疑可能是定制化混淆问题(自己排查咯,因为不适用定制化混淆插件出包是正常的,排查方向就有两个)
    2.1 微信资源混淆,布局、控件问题?(就是配置资源混淆白名单,因为是荣耀 SDK 的布局显示,有点盲目配置,最终未果)
    2.2 代码混淆问题?(对方技术说:荣耀 SDK 加载 assets 目录下的某个插件失败导致。资源白名单配置一番未果,在想是不是没有 keep 荣耀的某些代码导致的?)

这里的 定制化混淆 其实大概描述就是:

  • 严格控制混淆规则,最大化混淆第三方及自身代码
  • 使用微信资源混淆插件,混淆 res 资源
  • 指定自身代码映射关系(如我有一个类 com.primer.Animal 和一个方法 sayHello,我想把它随机混淆成指定的 com.android.Hello,当然 Animal 里面的方法、字段也可以执行映射关系,如下:)
com.primer.Animal -> com.android.Hello:
	void sayHello(java.lang.String) -> sayGoodBy
  • And so on~

混淆规则

查看联运 SDK aar 里面带的混淆规则主要是针对包名 com.hihonor,再 aar 都有哪些包名:

新接入荣耀 SDK,混淆出包,登录提示框显示不全_第2张图片

除了显眼的 com.hihonor,诸如其他 android.s49gmc、androidx.s49gmc、s05gmc 等等缺失有点不一样,那么对比下联运 SDK、异常包、正常包三个的包名目录有没有特殊区别:

新接入荣耀 SDK,混淆出包,登录提示框显示不全_第3张图片

有一点不一样吧,定制化混淆的包部分联运代码被优化移除了,因为是他们的代码,只能摸着石头过河,而且他们的混淆规则也没有对诸如 android.s49gmc的 keep 规则,索性自己补充规则打包看看~~~

打包、运行,登录显示正常 Σ(⊙▽⊙"a

那就这样吧,不细究缘由,等渠道优化,先临时解决

新接入荣耀 SDK,混淆出包,登录提示框显示不全_第4张图片

补充规则

这是根据荣耀 SDK 补充的新规则

#====================== begin for honro
# 这些规则都是根据荣耀联运 SDK 包名所编写,简单得找包名前缀
#(对于混淆规则配置,我认为是最小化精准控制是较好的,别一上来就是写个超大范围的规则,如 keep com.org.**{*;})
# 说到这里我就想吐槽 ohayoo sdk 的混淆规则,真是不做修剪,向对方提过一次建议,不知道后来的版本有没有修改

-keep class com.hihonor.**{*;}
-keep class com.s49gmc.**{*;}
-keep class androidx.s49gmc.**{*;}
-keep class android.s49gmc.**{*;}
-keep class kotlin.s_c_.**{*;}
-keep class kotlin.s0*.**{*;}
-keep class kotlin.s4*.**{*;}
-keep class kotlin.s5*.**{*;}
-keep class kotlin.s7*.**{*;}
-keep class kotlin.s8*.**{*;}
-keep class kotlin.s9*.**{*;}
-keep class kotlin.sgc*.**{*;}
-keep class kotlin.shn*.**{*;}
-keep class s0*.**{*;}
-keep class s1*.**{*;}
-keep class s2*.**{*;}
-keep class s3*.**{*;}
-keep class s4*.**{*;}
-keep class s5*.**{*;}
-keep class s6*.**{*;}
-keep class s7*.**{*;}
-keep class s8*.**{*;}
-keep class s9*.**{*;}
-keep class sgc*.**{*;}
-keep class shn*.**{*;}

-keep class android.p33*.**{*;}
-keep class p0*.**{*;}
-keep class p1*.**{*;}
-keep class p2*.**{*;}
-keep class p3*.**{*;}
-keep class p4*.**{*;}
-keep class p5*.**{*;}
-keep class p6*.**{*;}
-keep class p7*.**{*;}
-keep class p8*.**{*;}
-keep class p9*.**{*;}

-keepclasseswithmembernames,includedescriptorclasses class com.hihonor.** {
    *;
}
-keepclasseswithmembernames,includedescriptorclasses class kotlin.** {
    *;
}
-keepclasseswithmembernames class s847gmc.s49gmc.** {
    *;
}
-keepclasseswithmembernames class s901gmc.s49gmc.** {
    *;
}
-keepclasseswithmembernames class sgc2.** {
    *;
}
-keepclasseswithmembernames class shngc.s49gmc.** {
    *;
}

-keepclasseswithmembernames class sgcgc2.** {
    *;
}

-keepclasseswithmembernames class com.s49gmc.s49gmc.** {
    *;
}

-keepclasseswithmembernames class org.bouncycastle.pkix.** {
    *;
}

-keepclasseswithmembernames class s05gmc.s49gmc.s49gmc.s49gmc.s49gmc.** {
    *;
}

-keepclasseswithmembernames class s49gmc.s49gmc.s49gmc.s49gmc.** {
    *;
}

-keepclasseswithmembernames class android.s49gmc.** {
    *;
}
-keepclasseswithmembernames class android.app.** {
    *;
}

-keepclasseswithmembernames class android.view.** {
    *;
}

-keepclasseswithmembernames class android.widget.** {
    *;
}

-keepclasseswithmembernames class s847gmc.** {
    *;
}
#====================== end for honro

这里主要是想对你说:当你遇到问题时,不要惊慌失措,要静下心来思考,并勇于面对问题,积极寻求解决方案。

在职场中能够快速、准确排查分析并解决问题,往往更容易得到同事的认可。

你可能感兴趣的:(android)