https://github.com/jymot/mv2build
Android build
https://github.com/jymot/mv2build
android android-build android-v2-signing
Last synced: about 1 month ago
JSON representation
Android build
- Host: GitHub
- URL: https://github.com/jymot/mv2build
- Owner: jymot
- Created: 2017-04-17T05:43:07.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-03-29T08:28:35.000Z (over 8 years ago)
- Last Synced: 2025-10-28T23:46:31.236Z (8 months ago)
- Topics: android, android-build, android-v2-signing
- Language: Java
- Homepage:
- Size: 305 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# MV2Build
打包使用 V2 签名,使用前请确保设置 V2。
### Gradle:
Add MV2Build as a dependency in your main build.gradle in the root of your project:
```gradle
buildscript {
dependencies {
classpath 'im.wangchao:v2-build-plugin:0.2.1'
}
}
```
```gradle
compile 'im.wangchao:build-helper:0.2.1'
```
`implementation` 代替 `compile`
### 如何使用
在主工程`build.gradle`文件中添加如下代码:
```gradle
apply plugin: 'im.wangchao.build'
mV2Build{
/**
* 渠道配置文件
*/
configFile = new File("${project.getProjectDir()}/mV2Build/config.json")
/**
* 需要清除渠道的 APK。如果配置该项,那么会有 clearChannel Task 提供使用,
* 该 Task 会请空指定 APK 的渠道信息。
*/
clearChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-0.apk")
/**
* 需要打印渠道信息的 APK。如果配置该项,那么会有 printChannelInfo Task 提供使用。
*/
printChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-测试渠道1.apk")
/**
* 在打包前,需要最先执行的脚本,执行顺序由数组顺序决定。
* 数组的值为需要执行脚本的绝对路径。
* 注意脚本中,如果使用相对路径,那么该相对路径是相对于项目根目录的,也就是${project.getRootDir()}
*/
preBuildScript = []
/**
* Multi-Channel
*/
channel {
/**
* Multi-Channel 输出目录
*/
outputDir = new File("${project.buildDir}/outputs/channel")
/**
* 执行 assembleReleaseChannel Task 输出 APK 的文件格式,可以不设置,默认为${appName}-release-${channel}
*/
// apkFileNameFormat = '${appName}-release-${channel}-test.apk'
/**
* 需要写入渠道的 APK。如果配置该项,那么会有 onlyWriteChannel Task 提供使用,
* 该 Task 只是将已经打好的包根据配置文件,写入渠道。
*/
writeChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-0.apk")
/**
* AndroidManifest.xml 文件
*/
manifestFile = new File("${project.getProjectDir()}/src/main/AndroidManifest.xml")
/**
* 依赖的变种类型,可以不设置,默认为 release
*/
// buildType = "release"
}
}
```
然后需要创建一个渠道包的配置文件,也就是上面要用到的渠道配置文件,比如创建一个`config.json`:
```json
{
"manifest": [
{
"key": "Test",
"value": "V{date}"
}
],
"channel": {
"increment": false,
"incrementCount": 10,
"list":[
{
"alias": "测试渠道",
"channel": "test",
"extraInfo": {}
}
]
}
}
```
1. **manifest**
配置该配置,会修改**lklBuild**中配置的`manifestFile`文件中的``节点,依据配置的`key-value`在``节点中查找`android:name`等于`key`的节点,并将其`android:value`设置为`value`。注意,如果`value`中包含`{date}`,会被替换为`yyyyMMdd-HHmmss`的时间格式化。
2. **channel**
该配置用于**assembleReleaseChannel**任务,该任务主要用于打发布的渠道包。
* `properties` 同上,和**multiServer**中的配置含义相同
* `increment` 是否打递增渠道包,也就是说渠道号从0开始递增
* `incrementCount` 递增渠道包的数量
* `list` 如果不打递增渠道包,那么打特殊渠道包,每一个item为一个渠道包
* `alias` 渠道别名
* `channel` 渠道号
* `extraInfo` 额外的配置
### 如何获取渠道信息
获取渠道信息:
```java
String channel = ApkInfoReader.getChannel(getApplicationContext());
```
获取别名:
```java
String alias = ApkInfoReader.getAlias(getApplicationContext());
```
获取`extraInfo`中的信息:
```java
ChannelInfo info = ApkInfoReader.getChannelInfo(App.instance().getApplicationContext());
String result = info.getExtraInfo().get("自定义的key");
```
### 打包
可以直接执行如下命令:
```shell
# 渠道发布包
gradle assembleReleaseChannel
```
如果不想执行命令,那么在**Android Studio**界面右侧,点击`Gradle`,然后选择你的主工程,然后找到`mv2build`目录,执行相应的任务就可以了。
### 参考致谢
* [walle](https://github.com/Meituan-Dianping/walle)