对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
매우 빠른 채널 패키징 도구
V2 버전은 APK Signature Scheme v2
만 지원하며, 새 버전의 서명 모드를 활성화하려면 signingConfigs
에서 v2SigningEnabled true
필요합니다. 이전 버전을 사용해야 하는 경우 여기에서 v1.0.9를 참조하세요.
packer-ng-plugin은 차세대 Android 채널 패키징 도구인 Gradle 플러그인으로, 100개의 채널 패키지를 생성하는 데 10 초밖에 걸리지 않으며 속도는 gradle-packer-plugin 보다 300 배 이상 빠릅니다. CI 시스템 통합에 쉽게 사용할 수 있습니다. 동시에 명령줄 패키징 스크립트가 제공되며 채널 읽기는 Python 및 C 언어로 구현됩니다.
Maven Central
// build.gradle
buildscript {
dependencies{
classpath ' com.mcxiaoke.packer-ng:plugin:2.0.1 '
}
}
apply plugin : ' packer '
// build.gradle
dependencies {
compile ' com.mcxiaoke.packer-ng:helper:2.0.1 '
}
참고: plugin
과 helper
의 버전 번호는 일관되어야 합니다.
packer {
archiveNameFormat = ' ${buildType}-v${versionName}-${channel} '
archiveOutput = new File (project . rootProject . buildDir, " apks " )
// channelList = ['*Douban*', 'Google/', '中文/@#市场', 'Hello@World',
// 'GradleTest', '20070601!@#$%^&*(){}:"<>?-=[];',./']
// channelFile = new File(project.rootDir, "markets.txt")
channelMap = [
" Cat " : project . rootProject . file( " channels/cat.txt " ),
" Dog " : project . rootProject . file( " channels/dog.txt " ),
" Fish " : project . rootProject . file( " channels/channels.txt " )
]
}
${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
입니다. 선택사항) )${project.buildDir}/archives
입니다(선택 사항). channelMap
: channelList
/ channelMap
/ channelFile
동시에 사용할 수 channelList
.세 가지 속성이 동시에 존재할 경우 우선 순위는 다음과 channelFile
. 또한 이 세 가지 속성은 다음과 같습니다. 명령줄 매개변수 -Pchannels
채널 이름 목록 파일은 한 줄에 하나의 채널이 있는 일반 텍스트 파일입니다. 줄의 시작과 끝 부분에 있는 공백은 무시됩니다. 주석이 있는 경우 #
사용하여 채널 이름과 주석을 구분합니다. .
채널 이름은 표준 중국어, 영어, 숫자를 최대한 사용하고, 특수문자나 보이지 않는 문자는 사용하지 않는 것이 좋습니다. 예: 채널.txt
productFlavors
프로젝트에서 사용되지 않습니다.
./gradlew clean apkRelease
productFlavors
프로젝트에 사용됩니다.
프로젝트에 여러 flavor
지정된 경우 채널에 패키징해야 하는 flavor
의 이름을 지정해야 합니다. 두 가지 flavor
있고 Paid
Free
있으며 패키징할 때의 명령은 다음과 같습니다.
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
./gradlew clean apkRelease
직접 사용하면 모든 flavor
의 채널 패키지가 출력됩니다.
매개변수를 통해 채널 목록을 직접 지정합니다( build.gradle
의 속성을 재정의함).
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
이 방법은 채널 수가 적을 때 사용할 수 있습니다.
매개변수를 통해 채널 목록 파일의 위치를 지정합니다( build.gradle
의 속성을 재정의함).
./gradlew clean apkRelease [email protected]
@ 기호를 사용하여 프로젝트 루트 디렉터리에 대한 상대 경로를 사용하여 채널 목록 파일의 위치를 지정합니다.
출력 디렉터리 및 파일 이름 형식 템플릿을 지정할 수도 있습니다.
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
이러한 매개변수 channels
output
format
조합하여 사용할 수 있으며 명령줄 매개변수는 build.gradle
의 해당 속성을 재정의합니다.
Gradle 패키징 명령 지침
채널에 의해 패키징된 작업의 이름은 apk${flavor}${buildType}
flavor
은 일반적으로 release이거나, 지정하는 beta 또는 someOtherType일 수 있습니다. 첫 번째는 무시할 수 있습니다. 문자는 대문자로 사용해야 합니다 release
flavor
Paid
이고, 유형에 해당하는 작업 이름은 apkPaidRelease
이고, beta
유형에 해당하는 작업 이름은 apkPaidBetaBeta
등이라고 가정합니다.
특별 알림
다른 리소스 압축 도구나 애플리케이션 강화 기능을 동시에 사용하는 경우 명령줄 스크립트 패키징을 사용하여 채널 정보를 추가해야 합니다. 채널 정보 추가는 APK 처리 프로세스의 마지막 단계에 배치되어야 합니다.
Gradle 통합을 사용하는 것 외에도 프로젝트에서 제공하는 Java 스크립트 패키징을 사용할 수도 있습니다. Jar는 이 프로젝트의 tools
디렉터리에 있습니다. 이하, packer-ng
java -jar tools/packer-ng-2.0.1.jar
를 참조하는 데 사용됩니다. java -jar tools/packer-ng-2.0.1.jar
, 여기에 몇 가지 예가 있습니다.
packer-ng - 表示 java -jar packer-ng-2.0.1.jar
channels.txt - 替换成你的渠道列表文件的实际路径
build/archives - 替换成你指定的渠道包的输出路径
app.apk - 替换成你要打渠道包的APK文件的实际路径
packer-ng generate --channels=ch1,ch2,ch3 --output=build/archives app.apk
packer-ng generate [email protected] --output=build/archives app.apk
packer-ng verify app.apk
java -jar tools/packer-ng-2.0.1.jar --help
python tools/packer-ng-v2.py app.apk
cd tools
make
make install
packer app.apk
// 如果没有找到渠道信息或遇到错误,默认返回的是""
// com.mcxiaoke.packer.helper.PackerNg
String channel = PackerNg . getChannel ( Context )
형식 템플릿은 Groovy 문자열 템플릿 엔진을 사용합니다. 기본 파일 이름 형식은 ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
입니다.
앱 패키지 이름이 com.your.company
, 채널 이름이 Google_Play
, buildType
, release
, versionName
2.1.15
, versionCode
200115
인 경우 생성된 기본 APK의 파일 이름은 com.your.company-Google_Player-release-2.1.15-20015.apk
입니다. com.your.company-Google_Player-release-2.1.15-20015.apk
.
다음 변수를 사용할 수 있습니다.
applicationId
(앱 패키지 이름 packageName)buildType
(릴리스/디버그/베타 등)flavor
(유료/무료 등 플레이버 이름)versionName
(표시에 사용되는 버전 번호)versionCode
(빌드 번호)buildTime
(컴파일 빌드 날짜 및 시간)fileSHA1
(최종 APK 파일의 SHA1 해시) 채널 읽기의 C 언어 구현은 GenericMakefile을 사용하여 구축되었으며 APK 서명 블록 읽기 및 쓰기의 Java 구현은 apksig 및 walle에서 수정되었습니다.
Copyright 2014 - 2021 Xiaoke Zhang
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.