对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
Ferramenta de empacotamento de canal extremamente rápida
A versão V2 suporta apenas APK Signature Scheme v2
, que requer v2SigningEnabled true
em signingConfigs
para ativar a nova versão do modo de assinatura. Se você precisar usar a versão mais antiga, consulte v1.0.9 aqui.
packer-ng-plugin é o plug-in Gradle da ferramenta de empacotamento de canais Android da próxima geração. Ele suporta empacotamento extremamente rápido . Leva apenas 10 segundos para produzir pacotes de 100 canais. Ele pode ser facilmente usado para integração do sistema CI. Ao mesmo tempo, um script de empacotamento de linha de comando é fornecido e a leitura do canal é implementada em linguagem Python e 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 '
}
Nota: Os números de versão do plugin
e helper
precisam ser consistentes
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}
(. opcional) )${project.buildDir}/archives
(opcional). Nota: channelList
/ channelMap
/ channelFile
não pode ser usado ao mesmo tempo. Basta escolher uma de acordo com a situação real. Quando as três propriedades existem ao mesmo tempo, a prioridade é: channelList
> channelMap
> channelFile
. será substituído pelo parâmetro de linha de comando -Pchannels
O arquivo de lista de nomes de canais é um arquivo de texto simples, lido linha por linha, com um canal por linha. Os espaços em branco no início e no final da linha serão ignorados. Se houver comentários, use #
para separar o nome do canal e os comentários. .
Recomenda-se que o nome do canal use o padrão chinês, inglês e números , tanto quanto possível, e não use caracteres especiais e invisíveis. Exemplo: canais.txt
productFlavors
não são usados no projeto
./gradlew clean apkRelease
productFlavors
são usados no projeto
Se vários flavor
forem especificados no projeto, você precisará especificar o nome do flavor
precisa ser empacotado no canal. Suponha que você tenha dois flavor
, Paid
Free
, e o comando ao empacotar seja o seguinte:
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
O uso direto de ./gradlew clean apkRelease
gerará pacotes de canais de todos flavor
.
Especifique diretamente a lista de canais por meio de parâmetros (substituirá as propriedades em build.gradle
):
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
Este método pode ser usado quando o número de canais é pequeno.
Especifique a localização do arquivo da lista de canais por meio de parâmetros (substituirá as propriedades em build.gradle
):
./gradlew clean apkRelease [email protected]
Use o símbolo @ para especificar a localização do arquivo da lista de canais, usando um caminho relativo ao diretório raiz do projeto.
Você também pode especificar o diretório de saída e o modelo de formato de nome de arquivo:
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
format
output
desses channels
de parâmetros pode ser usado em combinação, e os parâmetros da linha de comando substituirão as propriedades correspondentes de build.gradle
.
Instruções de comando de empacotamento do Gradle
O nome da tarefa empacotada pelo canal é apk${ flavor
apk${flavor}${buildType}
O buildType geralmente é lançado ou pode ser beta ou algumOtherType que você especificar, você pode ignorá-lo. a letra precisa ser maiúscula ao usá-la. Suponha que flavor
seja Paid
, release
O nome da tarefa correspondente ao tipo é apkPaidRelease
, o nome da tarefa correspondente ao tipo beta
é apkPaidBetaBeta
, e assim por diante para os outros.
Lembrete especial
Se você usar outras ferramentas de compactação de recursos ou funções de proteção de aplicativo ao mesmo tempo, use o pacote de script de linha de comando para adicionar informações do canal. A adição de informações do canal precisa ser colocada na última etapa do processo de processamento do APK.
Além de usar a integração Gradle, você também pode usar o pacote de script Java fornecido pelo projeto. Jar está localizado no diretório tools
deste projeto. A seguir, packer-ng
é usado para se referir a java -jar tools/packer-ng-2.0.1.jar
, aqui estão alguns exemplos.
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 )
O modelo de formato usa o mecanismo de modelo de string Groovy. O formato de nome de arquivo padrão é: ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
.
Se o nome do pacote do seu aplicativo for com.your.company
, o nome do canal for Google_Play
, buildType
for release
, versionName
for 2.1.15
, versionCode
for 200115
, o nome do arquivo do APK padrão gerado será com.your.company-Google_Player-release-2.1.15-20015.apk
.
As seguintes variáveis estão disponíveis:
applicationId
(nome do pacote de aplicativo packageName)buildType
(versão/depuração/beta, etc.)flavor
(nome do sabor, como pago/gratuito, etc.)versionName
(número da versão usado para exibição)versionCode
(número da compilação)buildTime
(data e hora de compilação da compilação)fileSHA1
(hash SHA1 do arquivo APK final) A implementação da linguagem C para leitura de canais é construída usando GenericMakefile, e a implementação Java de leitura e gravação de blocos de assinatura de APK é modificada de apksig e 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.