# apkMerge
**Repository Path**: a3077932030/apkMerge
## Basic Information
- **Project Name**: apkMerge
- **Description**: android apk合并:将多个合并成一个。 apk修改:可修改包名、图标、版本号等
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-07-15
- **Last Updated**: 2026-02-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 工具介绍
通过使用gui界面来操作[apkMerge_gui](https://github.com/ming123aaa/apkMerge_gui)
[aarMergeTool](https://github.com/ming123aaa/aarMergeTool) :支持aar合并,apk转aar
## 如何编译成可运行的jar
### 1.设置 Artifacts
打开idea
1.file->project Structure
2.选中Artifacts 点+号添加
3.弹出选中 jar-> from modules with dependencies
4.选择模块 选择main类 选择META-INF的位置(一定要重新选择,不要用默认)
5.完成
### 运行Artifacts
build->build Artifacts->选中刚刚设置的Artifacts->等待jar生成
## 使用jar
查看命令帮助
java -jar gameSdkTool.jar -h
常用用法已经写成.bat文件了,可以直接使用 [tools](tools)
其中[tools/jar/gameSdkTool.jar](tools/jar/gameSdkTool.jar)可能不是最新版,需要替换成最新版
注意:如果开启了windows实时保护功能,可能会让程序执行起来很慢,需要将操作的文件夹设置为windows安全中心的排除项。
打开“设置” > “更新和安全” > “Windows 安全中心” > “病毒和威胁防护”。
在“病毒和威胁防护设置”下点击“管理设置”。
滚动到“排除项”,然后点击“添加或删除排除项”。你可以添加特定的文件夹、文件类型或进程。
## 运行参数
[CommandArgs.java](src/main/java/com/oh/gameSdkTool/CommandArgs.java)
## 配置文件
## ApkConfig.json
[ApkConfig.kt](src/main/java/com/oh/gameSdkTool/bean/ApkConfig.kt)
## SignConfig.json
[SignConfig.kt](src/main/java/com/oh/gameSdkTool/bean/SignConfig.kt)
## ChannelConfig.json
[ChannelConfig.kt](src/main/java/com/oh/gameSdkTool/bean/ChannelConfig.kt)
## 合并时application只能有一个
合并后Application_Name会记录application,多个application会用,分割
## 合并时替换启动activity
如果合并的其中一个AndroidManifest.xml存在以下节点
就代表会删除另一个AndroidManifest.xml的中启动activity(android.intent.category.LAUNCHER) , 且android:value的值也会被替换成删除的activity类名(多个activity会用,隔开)
## 合并前修改内容
private const val assets_merge_ApkConfig = "/assets/mergeApkContent/ApkConfig.json" //存在则触发合并前修改内容
在apk合并前会根据ApkConfig.json修改内容。(主包不会生效)
## 合并时,若开启了文件冲突重命名功能(-isRenameRes,-isRenameClassPackage),可设置不排除文件
### keepClass规则
默认情况下会有自己的keepClassPackage,会保持kotlin, META-INF/services下面的class
通过以下文件设置:
private const val keepClassJson="/assets/keepClassPackage.json" //冲突不修改的class Set
```
["aaa.bbb","ccc,aaaa"]
```
### keepRes规则
通过以下文件设置:
private const val keepResNameJson="/assets/keepResNamePackage.json" //冲突不修改的res Map>
```
{
"layout":["activity_main"],
"string":["app_name"]
}
```
## 使用文档
### 可用命令
以下是工具支持的主要命令及其功能:
| 命令 | 描述 |
|------|------|
| `-generateMergeChannelApk` | 合并渠道并生成APK |
| `-generateMultipleChannelApk` | 批量生成渠道APK |
| `-mergeSmali` | 合并两个包的smali环境 |
| `-decompile` | 反编译APK |
| `-sign` | 为APK签名 |
| `-toApk` | 将smali环境生成APK |
| `-changeApk` | 修改APK并重新生成 |
| `-changeSmali` | 修改smali环境 |
| `-apk2aar`/`-apkToAar` | 将APK转换为AAR |
| `-mergeAar` | 合并AAR文件 |
| `-toUnzip` | 解压文件 |
| `-toZip` | 压缩文件 |
### 常用参数说明
| 参数 | 描述 | 必要 |
|------|------|------|
| `-libs` | 运行环境路径,包含所需的jar和可执行程序 | 是 |
| `-out`/`-o`/`-outPath` | 输出路径 | 是 |
| `-baseApk`/`-basePath` | 主包路径 | 部分命令 |
| `-channelApk`/`-channelPath` | 渠道框架包路径 | 部分命令 |
| `-apkConfig` | ApkConfig配置文件路径 | 部分命令 |
| `-signConfig` | 签名配置文件路径 | 部分命令 |
| `-channelConfig` | ChannelConfig配置文件路径 | 部分命令 |
| `-aarConfig` | aarConfig配置文件路径 | 部分命令 |
| `-baseSmali` | 主包smali环境路径 | 部分命令 |
| `-channelSmali` | 渠道框架smali环境路径 | 部分命令 |
### 合并apk参数
| 参数 | 描述 |
|------|------|
| `-isRenameRes` | 资源重名时是否重命名 |
| `-isRenameClassPackage` | 类重名时是否修改包名 |
| `-replaceApplication` | 合并AndroidManifest.xml时替换Application类 |
| `-useChannelRes` | 优先使用渠道包内的资源文件 |
| `-useChannelRes` | 优先使用渠道的代码 |