flutter上架马甲包过审:

所谓马甲包,就是完全复制主包功能或保留部分功能分身包,而各大应用商店都是不允许马甲包的存在的,所以就要通过技术手段,让马甲包与主包的外表和内在都变得不一样。简单得分为两个步骤:
1、改变马甲包的外表-换肤
其中包括包名,包名称,应用图标和应用主页面布局和整体风格等。
2、改变马甲包的内在-混淆

这里简单记录下我们公司flutter项目马甲包的上架过程,总共提审了vivo、oppo、华为、小米、腾讯应用宝:


资料准备:
因为我们的马甲包是上传在同一个公司主体下,所以需要提前准备一下资料:
1、软著
2、承诺函
3、安全评估报告
4、安全评估提交截图
5、icon
6、五图
7、上架内容(主副标题,一句话简介,应用描述等)


换肤

由于时间比较紧张,并且项目比较庞大,所以我们只是改变了主色系以及登录流程和首页一级tab页的UI布局。


混淆
flutter构建apk是默认混淆的!起初我们没有做任何处理就提审了,结果当然是审核不通过!

这简直就是一模一样啊!于是我们做了以下处理:

1、修改图片资源名
修改图片资源名python脚本代码如下,将所有图片资源名末尾加上一个同样的字符串就好了;
注意:我们的图片资源都是放在/assets/images目录下,脚本代码根据你们项目调整;

#项目目录
projectAbsRootPath = sys.path[0]
#图片所在的资源目录路径
assetPath="/assets/images"
#项目中dart代码所在目录
libPath = projectAbsRootPath+ "/lib"
assetAbPath = projectAbsRootPath+assetPathprint("projectRootPath:" + projectAbsRootPath +  "   assets:" +assetAbPath + "     lib:" + libPath)
print("----------开始查找图片--------------")
#遍历目录,将图片存储到list中的方法
def searchImage(filePath:String):list = []isDir = os.path.isdir(filePath)if isDir:for f in os.listdir(filePath):if f.startswith("."):print(filePath+"/"+f)else:tList = searchImage(filePath+"/"+f)list.extend(tList)else:if imghdr.what(filePath) in {"png"}:list.append(filePath)return list#项目中使用的图片资源路径集合
imageList = searchImage(assetAbPath)for name in imageList:print(name)
for num in range(0,len(imageList)):# if(num<10):pList = imageList[num].split("/")imgName = pList[-1]txt = imageList[num].replace(imgName, '')nList = imgName.split(".")imgName = nList[0]os.rename(imageList[num],txt + '/' + imgName + '_project2.png')

然后通过android studio修改资源的引用路径就可以了,改完记得多测试!

2、原生层加垃圾代码
加垃圾代码,可以用到AndroidJunkCode库:
使用方法
根目录的 build.gradle 中:

buildscript {repositories {mavenCentral()}dependencies {classpath "com.github.qq549631030:android-junk-code:x.x.x"}
}

app 目录的 build.gradle 模块中:

apply plugin: 'com.android.application'
apply plugin: 'android-junk-code'androidJunkCode {variantConfig {release {//变体名称,如果没有设置 productFlavors 就是 buildType 名称,如果有设置 productFlavors 就是 flavor+buildType,例如(freeRelease、proRelease)packageBase = "cn.hx.plugin.ui"  //生成 java 类根包名packageCount = 30 //生成包数量activityCountPerPackage = 3 //每个包下生成 Activity 类数量excludeActivityJavaFile = false //是否排除生成 Activity 的 Java 文件,默认 false(layout 和写入 AndroidManifest.xml 还会执行),主要用于处理类似神策全埋点编译过慢问题otherCountPerPackage = 50  //每个包下生成其它类的数量methodCountPerClass = 20  //每个类下生成方法数量resPrefix = "junk_"  //生成的 layout、drawable、string 等资源名前缀drawableCount = 300  //生成 drawable 资源数量stringCount = 300  //生成 string 数量}}
}

做完这些处理,再次提交就没啥问题了!!!


最后

最终我们也只通过了vivo、oppo、小米、腾讯应用宝,华为对于马甲包的人工审核太严了需要大改版,只能放弃!
另外在上架应用时需要“全国互联网安全服务管理提交结果截图”,显示结果为成功才行,需要审核人员上门检查比较麻烦,用主包的截图ps一下就好了

【flutter】上架马甲包过审相关推荐

  1. 微信小游戏马甲包过审(马甲包过包)

    什么是微信小游戏马甲包 微信小游戏马甲包 是指同一套游戏源码使用不同的主体上线微信小游戏平台. 如果要过审的马甲包游戏源码上传时没有经过混淆处理,就会被微信识别到代码侵权然后打回,同时主体信用分-5( ...

  2. 2019 iOS马甲包过审经验4.3和2.1的过包技巧

    1. 机审原理 我们虽然无法得知苹果实际的机审原理,但从程序员的角度还是能分析出一些东西的. 1.1 首先OC和C++代码编译出的二进制文件,有点经验和反编译过的应该都知道: 删注释神马的是没用的,因 ...

  3. App Store提审被拒后成功上架马甲包经历分享

    在App Store里,常常会有一些BC游戏App看起来名称不同.icon不同.LOGO介绍也不同,但你可以测试一下,下载后却发现,游戏内容一模一样.这就是我们常说的"马甲包"也可 ...

  4. GooglePlay马甲包过审详细流程

    1. 更改内部的包名 直接选中app/src/main/java下的自定义包名,有可能refactor后还有需要手动调整的地方,编译不过时可以定位. 2. 打包时修改Manifest文件.保证每个包的 ...

  5. iOS马甲包过审技巧汇总

    现在苹果爸爸的审核越来越严格,此前不久就出现大量APP下架事件,后续苹果官网对外宣传的原因是违反了苹果审核条款2.5.2的相关规定,即使用了"热更新"技术.虽然没有直接和马甲包相关 ...

  6. iOS马甲包过审经验4.3和2.1

    Guideline 4.3 - Design This app duplicates the content and functionality of other apps submitted by ...

  7. iOS马甲包上架招式

    一.什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法.马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致. 二.为什么 ...

  8. 技术指南|马甲包上架注意事项

    之前我们讲到了马甲包的作用,我们就接着分享如何上架马甲包,有过向 App Store 提交 App 被拒经历的人,大概都听说过这个恐怖的 4.3 条款,和下架14天封号的警告,最怕苹果爸爸深夜的关心, ...

  9. iOS马甲包开发招式及规避4.3方法合集

    看了下上周的留言,有些开发者老是抱怨马甲包又被拒了,该如何上包才安全,我对这块也算略知一二,也有朋友是做这块的,一些规避手段我还是知晓一二,我今天结合了网上的资料以及几位朋友的一些意见,把这些经验分享 ...

最新文章

  1. 未解决计算机主机与打印机,电脑无法与打印机连接 计算机网考题目2(12)
  2. 使用FastCoder写缓存单例
  3. php ajax邮箱,PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
  4. 1/4美国理工博士生中途离学 | Science:原因何在?
  5. html写界面,C++|Qt后台处理业务(后台登录例子JavaScript给Qt提供数据)
  6. 软件开发中的需求文档由谁来编写_使用 RStudio 中的 Rmarkdown 编写演示文档
  7. MySQL 如何利用一条语句实现类似于if-else条件语句的判断
  8. 5.分布式服务架构:原理、设计与实战 --- 基于调用链的服务治理系统的设计与实现
  9. 顺序存储循环队列的基本操作
  10. openssl 升级
  11. (Singleton)单例模式的Java实现
  12. oracle表空间可以更改吗,如何更改Oracle数据库表的表空间?
  13. 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!
  14. 为国内软件质量呐喊:《2021年国内质量调查报告》发布
  15. java代码实现CGCS2000大地坐标系经纬度转换为对应XY值
  16. 关于徐晓东,传统武术,以及太极拳
  17. 计算机的二进制算法与易图中,A.黑色素瘤B.脂肪瘤C.纤维瘤D.血管瘤E.皮脂腺囊肿1.好发于皮下、界限清楚、分叶状、生长较慢的肿瘤是()2.好发于皮下、质硬、生长缓慢的舯瘤是()...
  18. c++游戏编程初步(超简单)教学
  19. 3.1.1 docker入门
  20. animals中文谐音_搞笑的英语句子谐音

热门文章

  1. UE5 Gameplay 框架拆解
  2. Python 弹出对话输入框
  3. 计算机专业硕士论文评语,硕士论文评审意见范文
  4. 计算机专业硕士论文字数要求,计算机专业硕士论文写作格式要求
  5. mysql存储表情字符_MySQL 存储表情字符
  6. DDD 战术模型之聚合
  7. GSEA介绍--鹏鹏原创,必是精品
  8. 苹果微信cookie传不到服务器,cookie解决微信不能存储localStorage的问题
  9. C++多线程,线程函数传参显示没有重载函数接受4个参数
  10. [干货][互联网]备战春招秋招的经验分享