美文网首页
2019-07-18 360加固生产工具使用

2019-07-18 360加固生产工具使用

作者: 兣甅 | 来源:发表于2019-07-18 10:14 被阅读0次

    目的:加固、多渠道配置

    1.准备工作

    A.需要在app的manifest中配置Channel_Id和Channel_Name

    <application
        ...
        >
        <!--多渠道配置-->
        <meta-data
            android:name="Channel_Id"
            android:value="${CHANNEL_ID}" />
        <meta-data
            android:name="Channel_Name"
            android:value="${CHANNEL_NAME}" />
    </application>
    

    B.为了方便运行时也有渠道信息,需要在gradle中替换

    android {
        ...
        flavorDimensions "default"
          //公开发布商店渠道配置
        productFlavors {
          //程序员本地跑的包(只直接在AS中跑,不打包给其他人)
          Developer {
            dimension "default"
            manifestPlaceholders = [CHANNEL_ID  : "-1",
                                   CHANNEL_NAME: "内部"]
          }
          //打包后★必须使用多渠道设置渠道★(不直接跑包,打包时使用)
          Package {
            dimension "default"
            manifestPlaceholders = [CHANNEL_ID  : "10000",
                                    CHANNEL_NAME: "公司内部流通"]
          }
        }
        ...
    }
    

    2.工具使用流程

    1.打包(使用V1签名)完毕后,需要使用360加固助手进行加固和多渠道操作
    2.设置签名:选择应用加固-签名设置-添加签名后勾选启用自动签名
    3.加固助手多渠道配置:将Channel_Info.txt文件中的Channel信息复制到txt文件中,选择应用加固-多渠道设置-导入摸板-勾选启用多渠道打包
    4.设置生成包的地址:选择应用加固-基础设置-选择加固包的输出路径
    5.加固和多渠道:选择应用加固-添加应用-等待加固和多渠道整个流程完成
    6.查看加固情况:选择应用加固-右键加固包-选择任务详情-即可查看加固情况
    7.手动设置渠道和签名(当遇到有加固失败的情况,就需要手动设置渠道和签名):
    ①选择失败的渠道,将Channel_Info.txt文件中对应的Channel信息复制到新的txt文件中
    ②选择工具包-渠道打包-自己选择APK和输出路径(选择加固后没有渠道的包,结尾为_jiagu_sign.apk)-使用多渠道配置文件(刚才自己新建的txt)-生成渠道包
    ③选择工具包-签名APK-自己选择APK和输出路径(选择第②步生成的渠道包)-使用已配置的签名(V1)-开始签名-->完成失败APK的签名

    附:Channel_Info.txt内容(APP内部自动末尾添加:测试版末尾0,正式版末尾1)
    Channel_Id|Channel_Name Company 10000|公司内部流通
    Channel_Id|Channel_Name Official 10001|公司官网
    Channel_Id|Channel_Name Tencent 10002|腾讯
    Channel_Id|Channel_Name Baidu 10003|百度
    Channel_Id|Channel_Name XiaoMi 10004|小米
    Channel_Id|Channel_Name HuaWei 10005|华为
    Channel_Id|Channel_Name Oppo 10006|OPPO
    Channel_Id|Channel_Name Vivo 10007|VIVO
    Channel_Id|Channel_Name MeiZu 10008|魅族
    Channel_Id|Channel_Name Smartisan 10009|锤子
    Channel_Id|Channel_Name 360 10010|360
    Channel_Id|Channel_Name SamSung 10011|三星
    Channel_Id|Channel_Name Ali 10012|阿里
    Channel_Id|Channel_Name Operations 10099|运营
    

    3.APP读取渠道信息

    \color{red}{这里有个坑:debug的包直接读取渠道需要用Int,但是使用了360渠道更换需要使用String去读取}

    interface BuildConfigApp {
      companion object {
        //DEBUG为系统BuildConfig.DEBUG加上http是否使用正式服的判断合集
        val DEBUG = if (ApiConstants.Host.FORCE_RELEASE) {
          false
        } else {
          BuildConfig.DEBUG
        }
    
        private var channelId: String? = null
        private var channelName: String? = null
    
        //获取渠道ID
        fun getChannelId(context: Context? = App.INSTANCE): String {
          if (channelId.isNullOrBlank()) {
            //0对应测试版,1对应正式版
            val buildType = if (DEBUG) "0" else "1"
            if (context == null) {
              return ChannelConstants.DEFAULT_ID + buildType//DEFAULT_ID为内部渠道10000
            }
            //application信息
            val app = context.applicationContext
            //读取渠道信息
            val appInfo =
              app.packageManager.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA)
            //以dev结尾的是没有进行渠道打包的版本
            //channelId debug 要取Int;release 因为使用了360生成多渠道要取String
            var id = appInfo.metaData.getInt("Channel_Id", -1)
            if (id == -1) {
              val idStr = appInfo.metaData.getString("Channel_Id")
              if (!idStr.isNullOrBlank()) {
                try {
                  id = idStr.toInt()
                } catch (e: Exception) {
                  e.printStackTrace()
                }
              }
            }
            channelId = (if (id == -1) ChannelConstants.DEFAULT_ID else id.toString()) + buildType
          }
          return channelId!!
        }
    
        //根据渠道名称
        fun getChannelName(context: Context? = Utils.getApp()): String {
          if (context == null) {
            return "公司内部流通"
          }
          if (channelName.isNullOrBlank()) {
            //application信息
            val app = context.applicationContext
            //读取渠道信息
            val appInfo =
              app.packageManager.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA)
            //渠道名称
            val name = appInfo.metaData.getString("Channel_Name")
            channelName = if (name == null || name.contains("内部")) "公司内部流通" else name
          }
          return channelName!!
        }
    
        //是否是开发者运行版本(没有打渠道信息的版本)  提供给bugly统计上报信息使用的
        fun isDeveloper(app: Application): Boolean {
          //读取渠道信息
          val appInfo =
            app.packageManager.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA)
          //以dev结尾的是没有进行渠道打包的版本
          val id = appInfo.metaData.getInt("Channel_Id", -1)
          return id == -1
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:2019-07-18 360加固生产工具使用

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