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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

MYSQL事务死锁问题排查及解决方案

《MYSQL事务死锁问题排查及解决方案》:本文主要介绍Java服务报错日志的情况,并通过一系列排查和优化措施,最终发现并解决了服务假死的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录问题现象推测 1 - 客户端无错误重试配置推测 2 - 客户端超时时间过短推测 3 - mysql 版本问

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤