android多渠道自动打包工具,Android多渠道打包工具
# 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
android多渠道自动打包工具,Android多渠道打包工具相关推荐
- android系统自动构建,[系统集成] Android 自动构建系统
一.简介 android app 自动构建服务器用于自动下载app代码.自动打包.发布,要建立这样的服务器,关键要解决以下几个问题: 1. android app 自动化打包 android 的打包一 ...
- android程序自动卸载软件,Android应用静默安装和卸载
App的静默安装和卸载 Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别 是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统 ...
- android 360自动更新,解决Android百度自动更新SDK和360自动更新SDK兼容
最近上架的一个项目相序的被百度平台和360平台下架,郁闷的同时只能询问客服,得到的回复都是'**平台的自动更新SDK会在您系统自动安装有害系统的软件,请使用本平台提供的更新SDK',强制使用它平台的更 ...
- Android Studio自动排版格式化(android排版和xml排版)
Android Studio自动排版格式化 今天自己想让Android Studio软件自动格式化排版,结果搜了一下,都说是Ctrl + Alt + L 结果不行 后面自已经过网上一些提示和自己探索终 ...
- android编程 自动裁剪图片,Android编程实现调用相册、相机及拍照后直接裁剪的方法...
本文实例讲述了Android编程实现调用相册.相机及拍照后直接裁剪的方法.分享给大家供大家参考,具体如下: package com.cvte.health.phone; import java.io. ...
- android app自动锁屏,Android开机自动启动app 不锁屏
Android开机自动启动app 不锁屏 发布时间:2020-07-17 03:22:20 来源:51CTO 阅读:2086 作者:清水禅石 主要参考:http://life173.blog.51ct ...
- android 图片自动裁剪图片,Android图片选择到裁剪之步步深坑 – 简书
我的问题已经解决,查阅了几十篇相关文章,换了数种解决方案,最终解决,虽然不是按照本文来的,但关闭窗口的时候发现本文算是系统,特此转载. 最近在自己的项目里实现了一个头像选择的功能,就是先从相册里选取一 ...
- android studio自动设置权限,android studio打包,安装后权限都没有默认打开,如何设置打开?...
android studio打包,安装后权限都没有默认打开,如何设置打开?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ...
- android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法
Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...
- android+后台自动更新+上架,Android增量自动更新
抽取的Android自动更新库,目的是几行代码引入更新功能,含服务端代码,欢迎Star,欢迎Fork,谢谢- 目录 功能介绍 [x] 支持全量更新apk,直接升级到最新版本 [x] 支持增量更新,只下 ...
最新文章
- 8个流行的Python可视化工具包!!!
- linux 找回gpt分区,linux – 修复graid mini磁盘上损坏的GPT分区
- java web基础1Tomcat服务器基本知识
- C语言有三个电阻r1r2r3,[VR虚拟现实]ARM硬件试题库及答案(37页)-原创力文档
- python算发必须有输出吗_数据时代为什么一定要学python+算法?
- puTTY的配置导入和导出
- 应用MVP模式写出可维护的优美Android应用
- 【C++】【TinyXml】xml文件的读写功能使用——写xml文件
- binary_sort 二叉树
- jet mysql连接字符串,关于jet db的连接字串,以及加密后的字串-数据库专栏,SQL Server...
- 系统即将关机请保存关机是由nt_设置Windows电脑自动关机
- 解决安装IIS时提示找不到zClientm.exe文件的问题
- 04_mysql增删改操作
- 学了这几招,社交时人人都对你刮目相看
- HyperLynx(三)传输线类型及相关设置
- 10、【易混淆概念集】-第六章1 三点估算 类比估算和参数估算的区别 储备分析 历时估算 项目进度网络图
- Draco使用笔记(1)——图形解压缩
- hover出不来是什么原因css,关于css的:hover失效问题
- 6p14推挽胆机20w功放电路图_6P14推挽双输出牛胆机
- python对于0x01的处理
热门文章
- Python 程序员最常犯的十个错误
- Splunk安装和配置及源码编译安装SVN
- 无法打开物理文件 X.mdf。操作系统错误 5:5(拒绝访问。)
- params(C# 参考)
- 深入解析windows操作系统。。。。
- Cisco Catalyst 2960系列交换机资料
- linux 编译sqlitecpp,编译安装sqlite3数据库
- 6-4 链表拼接 (20分)_青岛喷绘制作公司不愿透露的喷绘布拼接与安装技巧,建议收藏...
- oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)
- mysql安装samba_centos 安装samba