
image.png
实际上,当处理arrays.xml / colors.xml / demens.xml / strings.xml资源时,不会处理values.xml资源. 稍后,当生成R文件时,将提示资源冲突. 您需要将values.xml转换为arrays.xml / colors.xml / demens.xml / strings.xml等文件.
在values / values-hdpi和其他目录中,重复定义通道的资源属性和游戏的资源属性. 例如,字段app_name已在游戏中定义,但此字段也已在频道资源中定义. 这种处理会删除通道定义的属性.
对于上述问题,您可以在PackageApkTool / MergeResUtils.py中查看handle_res_dirs的特定实现
通常,在合并游戏和通道的清单文件时,首先修改通道的差异参数配置,然后将相应的节点属性直接复制到游戏的清单文件中.
1. 在这里,您需要处理游戏的启动项和SDK的启动屏幕逻辑处理.
2,某些渠道需要处理游戏的主要活动.
在实际操作中,发现在对单个游戏包进行反编译之后,Manifest文件具有两个字段,compileSdkVersion和compileSdkVersionCodename,即使下载了最新版本的apktool也无法识别. 这是因为在编译游戏以生成apk包时,已编译版本设置为compileSdkVersion = 28. 在这里,需要额外的处理以删除compileSdkVersion和compileSdkVersionCodename字段.
但是,在单个软件包中发现仅删除它是不够的. 您需要将targetSdkVersion设置为23或更高才能正常.
对于上述问题,您可以在PackageApkTool / MergeManifesUtils.py
中检查merge_manifest_config的具体实现.
事实上,有很多原因导致aapt在生成R文件时停止运行,但基本上是由资源文件或xml文件中的错误引起的. 需要慢慢找到特定错误的原因.

此问题发现,在对程序包主体进行反编译之后,生成的资源文件存在问题. 发现在布局xml中自动生成了n1字段.

image.png
最终定位的原因是模拟游戏母包的apk包是Android Studio 3.0 Build Apks生成的包主体. 由类路径'com.android.tools.build:gradle:3.0.0'生成的包主体将被反编译. 这样,您可以设置gradle版本: classpath'com.android.tools.build:gradle:2.3.3'并且不会发生问题
此问题的典型情况是某些第三方通道引用了v7库,并且通过R.xxx引用了v7库中的res资源. 最终生成的程序包资源将仅与当前程序包名称相关. 为了解决这样指定程序包名称的问题,可以生成多个R文件.
PS: 但这是一个雷点: R文件以相同的ID生成,除了软件包名称不一致. 我不知道会不会有问题.
对于上述问题,您可以在PackageApkTool / MergeRFileUtils.py中检查create_r_files的具体实现
该文件不是标准的.ini标准格式,需要其他处理. 同时,文件的字符集为utf-8-sig. 读取后的第一行始终有一个空格. 报告错误,需要首先处理字符集.
对于上述问题,您可以在PackageApkTool / YsdkChannel.py中检查Modify_assets_resource的特定实现
此问题已得到很好解决. 解析文件之前,必须在解析之前设置名称空间. 与清单类似,您需要添加以下代码.
ET.register_namespace('android', "http://schemas.android.com/apk/res/android")
坑记录的详细代码可以从开源项目打包工具PackageApkTool下载
该工具在不断完善手游sdk登录失败怎么解决,欢迎每一位明星
如果您发现我的文章有帮助,请随时欣赏. 您的支持将鼓励我继续创造!

image.png
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-147116-2.html
做事方式
必将稳步向前