Android多渠道分包解决方案:向META-INF中塞入渠道信息(不用重签名)

本文主要是介绍Android多渠道分包解决方案:向META-INF中塞入渠道信息(不用重签名),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一. 前言
      • 二. 在META-INF文件夹中塞入文件
          • 1. 塞入空文件
          • 2. 塞入非空文件


一. 前言

游戏要进行分渠道的推广,需要进行分包统计,如果挨个打包,或者执行批量重签名,如果渠道包很多,这个过程就会很耗时间,有一个办法就是在apk的META-INF文件夹中塞入渠道信息文件,运行的时候进行读取,不需要进行重签名,速度快。

二. 在META-INF文件夹中塞入文件

把.apk改成.zip,用解压工具进入zip内部,可以看到有个META-INF文件夹
在这里插入图片描述
往里面META-INF文件夹中塞入渠道信息文件,然后再把.zip改成.apk即可

1. 塞入空文件

塞入文件命名格式channel_xxx,不需要后缀名,例channel_5343
读取渠道信息的java代码如下

public static String GetChannelMsg()
{String channelMsg = "";final String start_flag = "META-INF/channel_";ApplicationInfo app_info = context.getApplicationInfo();String courceDir = app_info.sourceDir;ZipFile zipFile = null;try {zipFile = new ZipFile(courceDir);Enumeration<?> entries = zipFile.entries();while(entries.hasMoreElements()){ZipEntry entry = ((ZipEntry)entries.nextElement());String entryName = entry.getName();if(entryName.startsWith(start_flag)){channelMsg = entryName.replace(start_flag, "");break;}}} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}finally{if(zipFile != null){try {zipFile.close();} catch (IOException e2) {// TODO: handle exceptione2.printStackTrace();}}}if(null == channelMsg || channelMsg.length() <= 0){channelMsg = "";}return channelMsg;
}
2. 塞入非空文件

和上面的方法基本一样,只是文件为非空文件。
塞入的文件命名:channel.properties
内容比如:

{"channel","5343"}

读取渠道信息文件的代码如下

import java.io.BufferedReader;public static String GetChannelMsg()
{String channelMsg = "";final String start_flag = "META-INF/channel.properties";ApplicationInfo app_info = context.getApplicationInfo();String courceDir = app_info.sourceDir;ZipFile zipFile = null;try {zipFile = new ZipFile(courceDir);Enumeration<?> entries = zipFile.entries();while(entries.hasMoreElements()){ZipEntry entry = ((ZipEntry)entries.nextElement());String entryName = entry.getName();if(entryName.startsWith(start_flag)){// 读取文件内容long size = entry.getSize();if(size > 0){BufferedReader br = new BufferedReader(new InputStreamReader(zipFile.getInputStream(entry)));String line;while((line = br.readLine()) != null){channelMsg += line;}}break;}}} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}finally{if(zipFile != null){try {zipFile.close();} catch (IOException e2) {// TODO: handle exceptione2.printStackTrace();}}}if(null == channelMsg || channelMsg.length() <= 0){channelMsg = "";}return channelMsg;
}

这篇关于Android多渠道分包解决方案:向META-INF中塞入渠道信息(不用重签名)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/497595

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器