=begin
删除静态库中的指定macho文件
@param1 要删除macho文件的静态库
@param2 要删除的macho合集
用法: ruby iOSDeleteMachoFile.rb IJKMediaFramework mutiple.md
=end
require 'fileutils'
# 所有指令集
$allArchs = ["armv7", "arm64", "i386", "x86_64"]
# 获取静态库所有支持的指令集(arm64,armv7)
def getArchitectures(library)
info = `lipo -info #{library}`
return info.split(" ") & $allArchs
end
# 提取所有指令集架构
def extractAllArchitectures(library, archs)
archs.each do |arch|
`lipo #{library} -thin #{arch} -output #{arch}` # 提取一个架构
end
end
# 删除macho文件
def deleteMacho(arch, machos)
machos.each do |macho|
`ar -d -sv #{arch} #{macho}` # 直接删除arch中的macho文件
end
end
# 将原库重命名
def libraryRename(library)
if library.scan(/\.[^\.]+$/)[0]
extension = library.scan(/\.[^\.]+$/)[0]
newFilename = String.new<<library
newFilename.insert newFilename.length-extension.length, "_backup"
else
newFilename = library + "_backup"
end
File::rename library, newFilename
end
# 合并.a文件
def mergeArchitectures(library, archs)
command = "lipo -create "
archs.each do |arch|
command << (arch + " ")
end
command << "-output #{library}"
`#{command}`
end
# 删除单独的指令集
def deleteSperateArchs(archs)
archs.each do |arch|
File::delete arch
end
end
# 删除library库的machos文件
def deleteMachoFile(library, machos)
archs = getArchitectures(library)
if archs.count
extractAllArchitectures(library, archs)
archs.each do |arch| # 遍历指令集,每一个指令集都删除machos
deleteMacho(arch, machos)
end
libraryRename(library)
mergeArchitectures(library, archs)
deleteSperateArchs(archs)
end
end
library = ARGV[0]
filename = ARGV[1]
if library && filename
machos = IO.readlines(filename)
if machos.count # 有需要删除的macho文件
deleteMachoFile(library, machos)
end
end
删除静态库中的指定macho文件
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在项目里遇到附件的下载和本地查看功能,附件有可能是word pdf 图片 Excel表格 甚至是ppt 有点变态吧...
- 一.DownloadManager的介绍 1.Android涉及到的网络数据请求,如果是零星数据、且数据量较小(...