美文网首页
删除静态库中的指定macho文件

删除静态库中的指定macho文件

作者: Billlin | 来源:发表于2017-07-05 20:12 被阅读0次
=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文件

    下载代码

  • 从MachO、DYLD到安全防护

    1、MachO 其实MachO是一种文件格式,它包含了可执行文件、动态库、静态库、目标文件、dyld等。对于我们编...

  • iOS逆向之旅(基础篇) — Macho文件

    Macho文件(Mach Object的缩写) 开发中常见的格式有 可执行文件 .o文件(目标文件)/a 静态库文...

  • vs2019笔记

    vs配置参数 配置静态库 指定头文件路径image.png 指定静态库路径image.png 添加静态库名称ima...

  • iOS - MachO文件

    定义 MachO是一种文件格式,内部包换:可执行文件,动态库,静态库,dyld,目标文件等。其中的可执行文件是一个...

  • iOS三方静态库符号冲突的原因以及解决方案

    动态库由于二级命名空间,不会符号冲突 静态库是.o文件的合集,最终生成macho需要链接 ,被主app项目符号合并...

  • 删除文件

    删除不需要的文件 一、删除工作区或版本库文件 1. git rm --- 删除指定文件2. git ...

  • 从 MachO 加载到对象创建!

    MachO MachO -- Mach Object, 是一种用于可执行文件/目标文件(.o)/动态库的文件格式....

  • git命令

    本地库的操作 查看当前状态 提交并添加注释 添加文件到仓库 从git库中删除指定文件,保留本地文件 查看具体修改内...

  • iOS ----- SDK开发

    1. 创建一个静态库 名字为 MySDK 删除没用的.m 文件 删除.h中内容 添加 #import 导入uik...

网友评论

      本文标题:删除静态库中的指定macho文件

      本文链接:https://www.haomeiwen.com/subject/jltchxtx.html