2021年5月30日
给大家看一台自媒体:
拿今年的系统去质疑我去年的回答,跨时空对线?
按他逻辑, 我也来辟个谣: 恐龙是不存在的, 因为我找遍全球都没找到一只活的恐龙.
前情提要:
编译一台安卓4.4(targetSdkVersion=20)的app同时安装到Android和鸿蒙上,
他们会报一台相似的警告, 而鸿蒙的逻辑明显不通
有人会说这里多一台因此啊, 这应该是语言包的问题, 同样应用在荣耀10(EMUI 10.0.0.156 Android 10)里显示如下:
首先鸿蒙os2.0的安卓部分并没有开源, 我只能从安卓代码里尝试找出逻辑
安卓源代码:
首先搜索"旧版", 找到id: deprecated_target_sdk_message
frameworks/base/core/res/res/values-zh-rCN/strings.xml
然后搜索这个id, 定位到DeprecatedTargetSdkVersionDialog
frameworks/base/services/core/java/com/android/server/wm/DeprecatedTargetSdkVersionDialog.java
搜索这dialog, 定位到showDeprecatedTargetSdkDialogUiThread
frameworks/base/services/core/java/com/android/server/wm/AppWarnings.java
继续往上, 分别到showDeprecatedTargetSdkDialogUiThread到UiHandler.Handler
到showDeprecatedTargetDialog, 最终找到
frameworks/base/services/core/java/com/android/server/wm/AppWarnings.java
翻译过来就是 如果app的targetSdkVersion小于MIN_SUPPORTED_TARGET_SDK_INT就会显示此Dialog, 而此Dialog的内容为预先定义好的"此应用专为旧版 Android 打造,因此可能无法正常运行。请尝试检查更新或与开发者联系。", 中间没有对此字符串做任何处理
至于MIN_SUPPORTED_TARGET_SDK_INT是多少可以通过终端查询到为23(终端也报了旧
版鸿蒙的警告)
ps: 这里其实可以拿 adb shell 运行的, 但是我感觉没有终端效果好
frameworks/base/core/java/android/os/Build.java
可知, 当发现app的targetSdkVersion小于23的时候便会显示此警告消息, 对应小于安卓6.0
限于篇幅, 不再验证此targetSdkVersion, 可自行验证
回归正题: 为啥会出现"旧版鸿蒙呢"
- "专为旧版鸿蒙打造"在逻辑上明显说不通, 应该不是工程师写的(有人会说鸿蒙1.0啊, 那请问鸿蒙1.0公布了吗? 没公布开发者如何"专门打造")
- "专为旧版鸿蒙打造"和"专为旧版Android打造"极度相似
- 此字符串作为一台资源文件常量声明在Android系统内, 没有任何逻辑会修改此字符串
- targetSdkVersion表现与安卓代码一模一样
可以怀疑: 鸿蒙代码部分可能复用了安卓的逻辑与资源文件, 并进行过批量替换, 且没有认真审计.
最后, 欢迎大家 证伪主论点/尝试证伪/提出反论点, 剩下的都算你赢, 我杠不过你.
图来自维基百科"诉诸人身" |