Google Play账户与App突遭封禁?紧急应对与快速重构上架策略

对于许多Google Play开发者而言,那个清晨无异于一场噩梦。一觉醒来,发现自己的应用已经从Google Play消失,有的甚至开发者账号也遭到封禁。收入流中断,用户投诉激增,品牌声誉受损。

Google Play最近大规模下架甚至封号行动再次敲响警钟:合规性不再是可选项,而是生存底线。Google Play的政策执行日趋严格和自动化,任何心存侥幸或行动迟缓都可能付出惨重代价。

由于篇幅有限,就不再赘述下架或者封号原因,本篇着重讲述:

Google Play开发者账户被封或者App被下架/暂停,如何快速再上架?

下面从不同维度,聊聊具体的步骤措施。

1. 项目创建

建议通过AS新创建一个项目的方式来,如果是直接copy之前封号的项目,则原来项目是有关联可能的。

2. 文件创建

关于文件能否复制,其建议是不要直接copy文件,而是通过新建文件的方式,再粘贴内容,稍微加点空格啥的,这样文件的MD5才会不是同一个。

3. 项目架构

如果能够对项目架构进行重构,涉及改动的代码就会非常多,这样代码关联性可行性更小。

比如之前用MVC,你就改为MVP、MVVM、MVI架构。

4. 三方库

如果某个包用了某某功能的三方库,比如权限请求,那你也可以尝试在新包使用另外的权限三方库。

比如GitHub - guolindev/PermissionX换成GitHub - getActivity/XXPermissions权限请求框架。

5. Java or Kotlin

比如之前使用Java开发的,可以考虑全部或者部分转为kotlin代码,也可以尝试Java和Kotlin 代码并存的方式,尤其是不会被混淆的实体类可以考虑此玩法。

6. 混合开发

使用常规的纯原生开发,也可以考虑尝试混合开发。

比如简单的和 WebView 里面的 H5 进行配合(Google Play对H5和原生的比例 貌似没有啥规定)。

亦或者使用 Flutter、RN 的方式,部分代码放置在原生,也可以尝试使用Compose进行开发。

7. 内部SDK

一般公司内部所有的app,都使用的是一些内部公共SDK,只要在遇到过封号问题,就不要使用这种方式了。

即使是放到jitpack,jcenter上也有一定风险。

8. App Name

取一个跟之前不一样的就行,建议拿到名字上相关网站搜一下,同名是否多,尤其是有存在且对方已做商标保护的,那就更加不要同名了。

可参考:

apkcombo.com/zh/

9. 包名

同样,取一个跟之前不一样的,比如公司名称简称sl,建议包名中就不要有sl了,eg:com.sl.appname此类操作更不建议。

有些小伙伴取出来的包名,真的一看就是同样的一家公司的。

设计一个新的即可,主题色可以适当改下。

11. 签名

重新生成一个新jks文件、密码和名称都变更下,与之前的不要有任何相似。

比如公司名称简称sl,建议jks中就不要有sl了。

12. 域名

买一个新的域名使用,一个app一个单独域名,域名的雷同也是有点小讲究。

比如api.appName1.go、api.appName2.go,这种还是比较明显。

13. 项目结构目录

调整下结构目录,比如名称、嵌套顺序等。

14. 文件名

修改所有的类名、布局文件名、资源文件名。

15. 依赖Module

相应依赖的module也做包名、项目结构目录、文件名调整。

16. UI

尤其是启动页、首页、尽量重新设计,主题色最好与之前有较大变化。

如果有时间,UI全套改下,最为稳妥。

17. 图标

图标的文件名必须全部修改,单纯修改文件名,一个文件的md5其实不会变,需要修改文件的内容。

还可以对图片进行压缩、格式转换,比如png convert to webp或者webp convert to png。

18. 布局文件的控件id

比如之前是btn_login,调整为btn_submit、buttonSubmit等。

19. 布局文件的控件类型

比如之前是LinearLayout,调整为androidx.appcompat.widget.LinearLayoutCompat。

比如之前是TextView,调整为androidx.appcompat.widget.AppCompatTextView。

20. strings.xml

比如之前是

复制代码
<string name="log_pwd">Password</string

调整为

复制代码
<string name="log_title_pwd">Password</string>

21. 代码混淆

可参考1:

AndroidProguadRules

https://github.com/king-ma1993/AndroidProguadRules

建议对bt-proguard.txt内容进行相应替换,每个app保证混淆的内容不一样即可,Android超级变态的混淆词典,常规abcd等混淆方式对逆向的干扰程序并不是很大,所以需要一个变态的字典,使用方法如下:

在proguard-rules.pro文件中进行配置

复制代码
-obfuscationdictionarybt-proguard.txt
-classobfuscationdictionarybt-proguard.txt
-packageobfuscationdictionary bt-proguard.txt

可参考2:

https://github.com/bytedance/AabResGuard/blob/develop/wiki/zh-cn/README.md

AabResGuard

对aab包的资源就行加密等处理。

22. ARouter

如果使用了ARouter 路由框架,建议做相应修改。

比如之前路由表

复制代码
const val HOME: String = "/app/home"

调整为

复制代码
const val INDEX: String = "/newapp/index"

23. 接口映射

比如之前登录接口是

复制代码
@POST("sl/app/login")suspend fun login(@Body params: HashMap<String, String>): NetResult<LoginResultEntity>

调整为​​​​​​​

复制代码
@POST("ax/FEW/MQx")suspend fun loginInter(@Body params: HashMap<String, String>): BaseResult<LoginEntity>

可以看到有几个变化:

1、接口请求的具体地址变了。

2、请求返回的NetResult变了。

3、请求返回的实体名称也变了。

4、接口请求的方法名也变了。

24. 未混淆的类(实体类等)

比如之前是​​​​​​​

复制代码
dataclassLoginResultEntity(
val token: String? = "",
val avatar: String? = ""
)

调整为

1、名称变更

2、增加垃圾字段​​​​​​​

复制代码
dataclassLoginEntity(
val a="",
val b="",
val token: String? = "",
val avatar: String? = "",
val c=""
)

25. 变量、方法名

大部分的变量和方法在混淆都是被重命名的,尤其注意的是打包的aab文件中,没有被重名的,进行相应修改。

这些结果可通过工具jadx-gui进行查看。

26. 三方库

相关三方库升级、或者用其他相关库替换。

27. 三方SDK key

关于使用的一些三方SDK。

比如AppsFlyer,新建一个App会有一个dev key,AppsFlyer默认每个app 的 dev key都是一样的,可联系对应商户更改。

28. XmlClassGuard

混淆xml文件用到的类。

可参考:

XmlClassGuard

https://github.com/liujingxing/XmlClassGuard

29. 更换技术栈

使用React Native等新技术重构应用的核心功能,以从根本上改变应用的架构和实现方式。

以上就是常见的项目重构策略。如果我们的App确实存在问题,需要进行重构和修复后才能重新上架。

本篇不保证重构上架百分之百成功,但至少在我们内部,此操作是可以成功再上架,并且保持长期在架的。

相关推荐
字节数据平台7 小时前
一客一策:Data Agent 如何重构大模型时代的智能营销
大数据·人工智能·重构
油泼辣子多加7 小时前
HTTP 请求体格式详解
网络·网络协议·http
恋猫de小郭7 小时前
Flutter 官方 LLM 动态 UI 库 flutter_genui 发布,让 App UI 自己生成 UI
android·前端·flutter
锅拌饭7 小时前
saveEnabled导致的Fragment大量泄露
android
喂完待续7 小时前
【序列晋升】28 云原生时代的消息驱动架构 Spring Cloud Stream的未来可能性
spring cloud·微服务·云原生·重构·架构·big data·序列晋升
叽哥7 小时前
Kotlin学习第 3 课:Kotlin 流程控制:掌握逻辑分支与循环的艺术
android·java·kotlin
范紫涵-19期-工职大7 小时前
虚拟机之CentOS、网络设置的有趣问题
linux·网络·centos
CYRUS_STUDIO7 小时前
别让 so 裸奔!移植 OLLVM 到 NDK 并集成到 Android Studio
android·android studio·llvm
尚久龙7 小时前
安卓学习 之 图片控件和图片按钮
android·java·学习·手机·android studio·安卓