android多渠道自动打包工具,Android多渠道打包工具

该脚本展示了如何自动化处理安卓应用的打包过程,包括从解包、修改渠道信息、重新签名到zipalign优化。它使用了apktool、jarsigner等工具,并定义了小米市场和360市场的渠道ID。此外,脚本还提供了输入输出目录、临时文件路径以及密钥库等配置。
摘要由CSDN通过智能技术生成

# encoding: UTF-8

require 'io/console'

require 'ruby-pinyin'

task :default => [:release]

PARTNERS = [

['小米市场', 0x10100009],

['360市场', 0x10100009]

]

INPUT_APK_DIR = 'input'

INPUT_APK_FILE_PATH = "unsigned.apk"

OUTPUT_APK_DIR = 'output'

OUTPUT_APK_PREFIX = 'prefix'

TEMP_DIR = 'tmp'

UNPACK_DIR = "#{TEMP_DIR}/unpack"

TEMP_UNSIGNED_APK_FILE_PATH = "#{TEMP_DIR}/unsigned.apk"

TEMP_SIGNED_APK_FILE_PATH = "#{TEMP_DIR}/signed.apk"

KEYSTORE = 'key.keystore'

KEYSTORE_KEY = 'key_alias'

ZIPALIGN = 'zipalign -f -v 4'

def unpack_apk

puts 'unpacking...'

filepath = "#{INPUT_APK_DIR}/#{INPUT_APK_FILE_PATH}"

puts filepath

`apktool d #{filepath} -o #{UNPACK_DIR} > /dev/null 2>&1`

end

def release(name, id, password, version)

puts "release #{name} (#{id.to_s(16)}) ..."

path = "#{OUTPUT_APK_DIR}"

FileUtils.mkdir_p path

filepath = "#{path}/#{OUTPUT_APK_PREFIX}_#{version}_#{to_pinyin(name)}.apk"

puts filepath

replace_umeng_channel(name, id)

pack

sign(password)

zip_align(filepath)

end

def to_pinyin(name)

PinYin.sentence(name).gsub(' ', '').gsub('(', '_').gsub(')', '')

end

def replace_umeng_channel(name, id)

id = "0x#{id.to_s(16).upcase}"

`sed -i -e '/UMENG_CHANNEL/s/value="[^"]*"/value="C_#{id}"/' #{UNPACK_DIR}/AndroidManifest.xml`

end

def replace_xp_key(key)

`sed -i -e '/FP_KEY/s/value="[^"]*"/value="#{key}"/' #{UNPACK_DIR}/AndroidManifest.xml`

`sed -i -e '/FX_KEY/s/value="[^"]*"/value="#{key}"/' #{UNPACK_DIR}/AndroidManifest.xml`

end

def pack

`apktool b -f #{UNPACK_DIR} -o #{TEMP_UNSIGNED_APK_FILE_PATH} > /dev/null 2>&1`

end

def sign(password)

`jarsigner -sigalg MD5withRSA \

-digestalg SHA1 \

-keystore #{KEYSTORE} \

-keypass #{password} \

-storepass #{password} \

-signedjar #{TEMP_SIGNED_APK_FILE_PATH} \

#{TEMP_UNSIGNED_APK_FILE_PATH} #{KEYSTORE_KEY}`

end

def zip_align(path)

`#{ZIPALIGN} #{TEMP_SIGNED_APK_FILE_PATH} #{path}`

end

def get_app_version_code

version = nil

file = open("#{UNPACK_DIR}/AndroidManifest.xml")

file.each_line do |line|

matches = /android:versionCode="(\d+)"/.match line

unless matches.nil?

version = matches[1]

break

end

end

version

end

def get_app_version_name

version = nil

file = open("#{UNPACK_DIR}/AndroidManifest.xml")

file.each_line do |line|

matches = /android:versionName="([\d.]+)"/.match line

unless matches.nil?

version = matches[1]

break

end

end

version

end

def clean

puts 'clean.'

`rm -rf #{TEMP_DIR}`

end

def jsontest

end

task :release do

print "Password:"

password = STDIN.noecho(&:gets).strip

puts ''

unpack_apk

versionName = get_app_version_name

versionCode = get_app_version_code

puts "App VersionCode: #{versionCode}"

puts "App VersionName: #{versionName}"

versionName = "2.0"

versionCode = 20

PARTNERS.each do |partner|

release(partner[0], partner[1], password, versionName)

end

clean

end

task :unpack do

unpack_apk

versionName = get_app_version_name

versionCode = get_app_version_code

puts "App VersionCode: #{versionCode}"

puts "App VersionName: #{versionName}"

end

task :unpack_apk do

unpack_apk

end

task :clean do

clean

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值