• 当一款应用或者游戏需要上不同的渠道平台时,肯定首先是接入需要上架的渠道的SDK,然后出对应的渠道包给渠道方,部分渠道方对于应用的ICON是有要求的,比如需要加渠道角标,也有可能不同的渠道需要不同的ICON去吸量,过一段时间后ICON也可能会涉及修改
  • 对于游戏应用来说,要维护N多套不同渠道SDK以及不同的ICON真的是有点繁杂了,最好的解决方案就是只接入一套统一的SDK、IOCN也不用在项目里面维护,由聚合SDK平台方进行维护,现在市面上有很多的聚合SDK,比如U8、Quick等,我们只需要接入的他们的聚合SDK就可以了,不用再维护具体的渠道和ICON
  • 如果我们自己有一套聚合SDK,当不同的渠道需要打入不同的ICON,我们应该怎么去实现呢,首先肯定需要去开发一个出包工具软件,主要就是用来打入不同渠道的代码,出不同的渠道包,这里我们就专门来讲下ICON的修改与合并吧
  • 首先我们使用apktool命令对apk进行解析,然后查看AndroidManifest.xml的application节点的属性,里面有个android:icon="@drawable/ic_launcher" ,ic_launcher一般是png图片,放在不同的drawable文件夹下
<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.KotlinDemo">
        ...
    </application>
  • 当我们得到了应用设置的ICON的名称后,我们就可以对这个“ic_launcher”,进行替换操作了,首先我们的准备一张新的ICON图片,我们统一使用PNG格式的图片吧,图片尺寸定为512*512吧,然后我们就需要对新的ICON图片进行缩放处理,下面是使用java实现的进行缩放处理方法
/**
     * @param srcImage 源图像文件
     * @param target   缩放后的图像路径
     * @param width    缩放后的宽度
     * @param height   缩放后的高度
     */
    public final static void scaleByWidthHeight(File srcImage, String target, int width, int height) {
        try {
            BufferedImage img = ImageIO.read(srcImage);
            Image _img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
            Graphics2D graphics = image.createGraphics();
            graphics.drawImage(_img, 0, 0, null);
            graphics.dispose();
            OutputStream out = new FileOutputStream(target);
            ImageIO.write(image, "png", out);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • drawable下有不同分辨率的文件夹,而且后面v4等其他的后缀,我们也不一定全部去覆盖掉,一般我们处理常见的就行了,只要能保证res下的“ic_launcher.png”全部被覆盖掉就行了
  • 我们就统一只适配drawable、drawable-ldpi、drawable-ldpi-v4、drawable-mdpi、drawable-mdpi-v4、drawable-hdpi、drawable-hdpi-v4、drawable-xhdpi、drawable-xhdpi-v4、drawable-xxhdpi、drawable-xxhdpi-v4、drawable-xxxhdpi、drawable-xxxhdpi-v4就行了,缩放的尺寸分别为:144、144、144、144、144、192、192、256、256、384、384、512、512,也可以自己定义尺寸大小,然后调用scaleByWidthHeight()方法进行缩放处理,处理完成后聚拷贝到对应drawable目录下去覆盖掉原来的ic_launcher.png文件就行了,然后再使用apktool命令将修改后的母包目录进行重新构建生成新的apk,然后进行签名。资源对齐等处理后,就成功的修改了原来的游戏母包的ICON了