美文网首页
Android 多渠道打包

Android 多渠道打包

作者: 夜沐下的星雨 | 来源:发表于2020-09-11 10:16 被阅读0次

    步骤:配置多渠道 -> 360加固助手多渠道打包加固 -> 批量修改生成的APK名称

    1、在 AndroidManifest.xml 中配置 meta-data 标签:

    image

    我这里定义的变量为"QD_CHANNEL_ID",这个变量有两个用处。

    a.可在代码中获取到渠道号,如下代码(tv_cur_qd是一个TextView):

               ApplicationInfo appInfo = null;
            String channelIdStr = "";
            try {
                appInfo = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
                Object channelId = appInfo.metaData.get("QD_CHANNEL_ID");
                channelIdStr = TextUtils.isEmpty(channelId.toString()) ? "1000" : channelId.toString();
            } catch (PackageManager.NameNotFoundException e) {
                channelIdStr = "1000";
                e.printStackTrace();
            }
            tv_cur_qd.setText("渠道id : " + channelIdStr);
    

    b.在下文使用360多渠道加固的时候会用到,与平台名称对应。

    2、在项目的 build.gradle 里配置 productFlavors,定义渠道号:

    这里配置了三个渠道号作为案例,如 xiaomi的渠道号为1001,当然这个1001是自己根据业务定义的。

    android {
     
        ................
     
        //多渠道打包,渠道配置,
        //Android Studio3.0 要求每个flavor必须有dimension
        productFlavors {
            //官方包
            official {
                dimension "official"
                //渠道标识
                manifestPlaceholders = [QD_CHANNEL_ID_VALUE: "1000"]
                //渠道包名不一致时可以单独设置每个包的包名
                //applicationId = "xx.xx.xx"
            }
            xiaomi {
                dimension "xiaomi"
                //渠道标识
                manifestPlaceholders = [QD_CHANNEL_ID_VALUE: "1001"]
                //渠道包名不一致时可以单独设置每个包的包名
                //applicationId = "xx.xx.xx"
            }
            huawei {
                dimension "huawei"
                //渠道标识
                manifestPlaceholders = [QD_CHANNEL_ID_VALUE: "1002"]
                //渠道包名不一致时可以单独设置每个包的包名
                //applicationId = "xx.xx.xx"
            }
        }
    }
    

    3、使用studio打包app,这里打包过程略。想看的可了解 《Android App打包》:https://blog.csdn.net/qq_30304193/article/details/81778579

    因为增加了多个渠道配置,以下操作步骤有所不同,Flavors选择official即可,然后点击finish,生成apk。

    image

    4、启动360加固助手,配置密钥可参考上步骤的文章,也可以参考《360加固助手使用手册》。然后进行"多渠道配置",这里有几个说明:

    配置多渠道:如下图配置,统计平台名称填与第一步中的清单文件变量名"QD_CHANNEL_ID"一致

    image

    导入:可以选择已有的配置文件导入,如下图(文件在360加固安装路径下):

    image

    **导出: **可以导出配置形成多渠道模板文件,如上图。
    5、按上述步骤配置好后,选择"加固应用",加固完后就会生成相应的渠道包了。

    这里可以在你的app中显示出你的渠道号,然后安装每个包验证一下是否成功。

    image

    6、批量修改apk名称。

    如上步骤生成的各渠道包,名字那么长且不符合要求,不可能就直接发给运营同志了,不然一个一个重命名得把他们搞死,不怼死你才怪。由于Android应用平台实在太多了,不说上百也有几十个,如果要按个进行重命名.....。

    以下是利用studio进行文件批量命名,当然还有其他方法,这里就介绍这个了。

    a.建立FileRename.java批量命名的代码文件,这里建在 <u style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word;">app\src\main\java</u> 下,当然放在哪里你可以自己选择。以下代码中,把路径换成你的路径就可以了,这里的路径指的是加固后存放apk的文件路径。

    注意:至于重命名的规则,可以根据自己的规则编写代码,这里只是根据上步骤5生成apk名字进行的案例编写。

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class FileRename {
     
        public static void main(String[] args) {
            multiRename("E:\\开发软件\\360加固\\360jiagubao1537\\jiagu\\output\\18682333090");
        }
     
        /**
         * 批量重命名
         * @param path
         */
        public static void multiRename(String path){
            File file = new File(path);
            boolean isDirectory = file.isDirectory();
     
            /** 如果不是文件夹,就返回* */
            if(!isDirectory){
                System.out.println(path + "不是一个文件夹!");
                return;
            }
     
            String[] files = file.list();
            File f = null;
            String oldFileName = ""; //之前的名字
            int count = 0; // 下划线个数统计
            int validApkcount = 0; // 有效apk包个数
            /** 循环遍历所有文件* */
            for(String fileName : files){
                oldFileName = fileName;
                count = fileName.length() - fileName.replace("_", "").length();
                if(fileName.endsWith(".apk") && count ==9){
     
                    String tempFileName = getText(fileName, 0, 6) + ".apk"; // 截取有用的文件名
                    String channelStr = getText(fileName, 8, 9); // 加固后的渠道
                    String originalChannelStr = getText(fileName,3, 4); // 加固前的渠道
     
                    fileName = tempFileName.replace(originalChannelStr, channelStr);
                    System.out.print(count + ":");
                    System.out.print(originalChannelStr + ":");
                    System.out.print(channelStr + ":");
                    System.out.print(tempFileName + ":");
                    System.out.print(fileName + "\n");
     
     
                    f = new File(path + "\\" + oldFileName); //输出地址和原路径保持一致
                    f.renameTo(new File(path + "\\" +  fileName));
                    validApkcount++;
                }else{
                    f = new File(path + "\\" + oldFileName);
                    f.delete();
                }
     
            }
     
            if(validApkcount > 0){
                System.out.println("恭喜,批量重命名成功!" + "共完成" + validApkcount +"个安卓包。");
                System.out.println("并已删除无效文件!");
            }else{
                System.out.println("未找到匹配的文件,请查看文件名是否符合线上环境包命名规则!");
                System.out.println("清空加固输出文件目录,请重新加固!");
            }
     
        }
     
        private static String getText(String str, int st, int ed) {
            int n = 0;
            int pos = -1;
            while (n < st) {
                pos = str.indexOf("_", pos + 1);
                if (pos == -1) {
                    return "";
                }
                n++;
            }
            int st_pos = pos;
            while (n < ed) {
                pos = str.indexOf("_", pos + 1);
                if (pos == -1) {
                    return str.substring(pos + 1);
                }
                n++;
            }
            return str.substring(st_pos + 1, pos);
        }
     
    }
    

    b .右键FileRename.java运行,如下操作:

    image

    b.运行结果如下:

    image

    相关文章

      网友评论

          本文标题:Android 多渠道打包

          本文链接:https://www.haomeiwen.com/subject/chyvektx.html