Android和iOS包批量重签名

编程之家收集整理的这篇文章主要介绍了Android和iOS包批量重签名编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Android篇环境要求1 安装winrar,然后配置winrar的环境变量,要用到winrar指令2 配置java的bin目录到环境变量,要用到jarsigner指令重签名步骤说明:1 从母包复制一个子包2 删除子包的签名文件META-INFO3 根据需要修改子包的文件,比如渠道号文件之类4 重签名子包对应的python脚本import os...,下方主要介绍关于Android和iOS包批量重签名的全文内容,希望对你有所帮助。

AndroID

环境要求

1 安装winrar,然后配置winrar的环境变量,要用到winrar指令

2 配置java的bin目录环境变量,要用到jarsigner指令

 

重签名步骤说明:

1 从母包复制一个子包

2 删除子包的签名文件meta-infO

3 根据需要修改子包的文件,比如渠道号文件之类

4 重签名子包

 

对应的python脚本

import os
import sys
import shutil
import Json

ORIGINAL_APK='母包.apk'
UNSIGN_APK='unsign.apk'
SIGNED_APK={"\"子包1.apk\"":1,"\"子包2.apk\"":2,"\"子包3.apk\"":3,"\"子包4.apk\"":4}

KEY_STORE='keystore文件.keystore'
KEY_PASS='key密码'
STORE_PASS='store密码'

def copy_apk(src_f,dst_f):
    if not os.path.isfile(src_f):
        print("%s not exist"%(src_f))
    else:
        fpath,fname=os.path.split(dst_f)
        shutil.copyfile(src_f,dst_f)
        print("copy %s -> %s"%(src_f,dst_f))


def zip_del_file(apk_f,del_f):
    os.system("winrar d %s %s"%(apk_f,del_f))
    print('zip_del_file:'+del_f)
    
def zip_add_file(apk_f,channel):
    del_dir("assets")
    os.makedirs("assets")
    f=open("assets\\AppParamSetting.txt",'w')
    f.write('{"channel":%s,"bundleIDentifIEr":""}'%(channel))
    f.close()
    os.system("winrar a -ad %s %s"%(apk_f,"assets\\AppParamSetting.txt"))
    
def del_file(f):
    os.remove(f)
    print('del_file:'+f)
    
def del_dir(f_dir):
    if os.path.exists(f_dir):
        shutil.rmtree(f_dir)
        print("del_dir:"+f_dir)
    
def sign_app(unsigned_app,signed_app):
    signcmd='jarsigner -verbose -keystore %s -keypass %s -storepass %s -signedjar %s -digestalg SHA1 -sigalg MD5withRSA %s sfish' % (KEY_STORE,KEY_PASS,STORE_PASS,signed_app,unsigned_app)
    os.system(signcmd)
    print(signcmd)
        
if __name__ == '__main__':
    cur_dir=os.getcwd()
    print('cur_dir'+cur_dir)
    copy_apk(ORIGINAL_APK,"tmp_"+ORIGINAL_APK)
    zip_del_file("tmp_"+ORIGINAL_APK,"meta-inf")
    for key in SIGNED_APK.keys():
        channel=SIGNED_APK[key]
        zip_add_file("tmp_"+ORIGINAL_APK,channel)
        sign_app("tmp_"+ORIGINAL_APK,key)
    del_dir("assets")
    del_file("tmp_"+ORIGINAL_APK)
    input("Done")

iOS篇

环境要求:

1 mac机子

2 证书文件,打开:Launchapd(火箭图标)->其他 -> 钥匙串访问,就在那里

3 .mobileprovision文件

 

 

重签名步骤说明:

1 从.mobileprovision文件生成enTitlements.pList文件

2 解压ipa,会得到一个Payload目录,再往里是一个xxx.app,显示内容可以看到里面的东西

3 删除签名文件,即:Payload/xxx.app/_CodeSignature目录

4 根据需要修改文件,比如渠道文件

5 重签名:/usr/bin/codesign指令

6 压缩ipa:zip指令

 

对应的python脚本

#!/usr/bin/python

import os
import sys
import Json

ORIGINAL_IPA='母包.ipa'
SIGNED_APK={"\"子包1.ipa\"":1,"\"子包2.ipa\"":2,"\"子包3.ipa\"":3,"\"子包4.ipa\"":4}
CERT_file='证书文件'
MOBILE_PROVISION_UUID = 'mobileprovision的uuID'

def get_mobile_provision_dir():
    return os.path.join(os.getenv('HOME'),'library/MobileDevice/Provisioning Profiles/')

def get_mobile_provision_file(uuID):
    return os.path.join(get_mobile_provision_dir(),uuID + ".mobileprovision")

def unzip_app():
    os.system('unzip -qo ./%s -d ./'%(ORIGINAL_IPA))
    print('unzip_app %s done!'%(ORIGINAL_IPA))  

def del_code_signature():
    os.system("rm -rf ./Payload/sfish.app/_CodeSignature")
    print('del_code_signature done!')

def resign_app():
    os.system('/usr/bin/codesign --continue -f -s "%s" --enTitlements "%s" "%s"'%(CERT_file,'./enTitlement.pList','./Payload/sfish.app'))
    print('resign_app done!')

def zip_app(f_ipa):
    os.system('zip -r %s ./Payload'%(f_ipa))
    print('zip_app done!')

def del_payload():
    os.system('rm -r ./Payload')

# 生成enTitlements.pList文件
def gen_enTitlements(uuID,out_file_name):
    os.system('security CMS -D -i "%s" > enTitlement_full.pList '%(get_mobile_provision_file(uuID) ))
    os.system('/usr/libexec/PListBuddy -x -c \'Print:EnTitlements\' enTitlement_full.pList > "%s" '%( out_file_name))

def rep_emb_file(uuID):
    os.system('cp "%s" ./Payload/sfish/embedded.mobileprovision' % (get_mobile_provision_file(uuID)))

def update_channel_file(channel):
    f_channel='./Payload/xxx.app/Data/Raw/channel.txt'
    fr=open(f_channel,'r')
    txt=fr.read()
    fr.close()
    Js=Json.loads(txt)
    Js['channel_ID']=channel
    fw=open(f_channel,'w')
    fw.write(Json.dumps(Js))
    fw.close()

if __name__ == '__main__':
    # 生成enTitlements.pList文件
    gen_enTitlements( MOBILE_PROVISION_UUID,"enTitlement.pList" )
    unzip_app()
    # 删除签名文件
    del_code_signature()
    for key in SIGNED_APK.keys():
        # 根据需要修改文件,比如渠道文件
        channel=SIGNED_APK[key]
        update_channel_file(channel)
        # 重签名
        resign_app()
        # 压缩ipa
        zip_app(key)
    del_payload()

 

 

 

总结

以上是编程之家为你收集整理的Android和iOS包批量重签名全部内容,希望文章能够帮你解决Android和iOS包批量重签名所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

iOS文章

C++ 文件操作文本文件写文件读文件程序运行时产生的数据都属于临时数据,程序一旦运行结束,数据都会被释放,通过文件可以将数据持久化C++ 中对文件操作需要包含头文件 < fstream >文件类型分为两种:文本文件: - 文件以文本的ASCLL码形式存储在计算机中;二进制文件:- 文件以文本的二进制形式存储在计算机中;(用户不能直接读懂它们)操作文件的三大类:ofstream: 写操作ifstream: 读操作fstream: 读写操作文本文件写文件
7 月 28 日,历史上的今天,Lua 首次在线上运行;戴尔工作站 400 推出;苹果宣布停产所有未运行 iOS 的 iPod 设备。
近期由于公司项目的需要,全程参与了公司一款iOS原生应用的开发与上线。其中最让我印象深刻的还是申请苹果开发者账号以及app的上架审核。所以,在此记录下操作流程。刚刚涉猎iOS开发的同学,可能存在疑问,苹果开发者账号是个啥?比如发布一个Android应用到应用宝或者华为应用市场,我们首先需要申请软著,然后到相应发布平台申请账号填写app信息进行发布。iOS也一样,但是他没有这么多的发布平台,只有app store,而发布到app store就需要一个苹果开发者账号。 除此之外,比如运行真机调试,app出包签名
uniapp打包IOS详细步骤
RunloopRunLoop 的本质是什么?答:本质是一个OC对象,内部也有isa指针。Runloop和线程是什么关系?答:线程和 RunLoop 之间是Key-value的对应关系,是保存在一个全局的 Dictionary 里,线程是key,RunLoop是value,而且是懒加载的。Runloop的底层数据结构是什么样的?有几种 运行模式(mode)?每个运行模式下面的 CFRunloopMode 是哪些?他们分别是什么职责?答:Runloop的底层数据结构(NSRunLoop是
1 C++输入输出综述C++ IO首先建立在为Unix环境开发的原始库函数上;ANSI C正式承认这个库时,将其称为标准输入/输出包;IO相关类定义在头文件iostream和fstream,这些类不是正式语言定义的组成部分,cin,istream都不是关键字。1.1 流和缓冲(1)流简介:C++程序将输入和输出看作字符流;对于输入来说,程序从输入流中抽取字符,对于输出来说,程序向输出流中插入字符;输入流可以来自键盘、存储设备或者其他程序;输出流可以输出至显示器、打印机、存储设备或者其他程序。
MacBook Pro 14/16英寸2021款 扬声器 爆音问题 噼啪声 官方解决方案 亲测有效
本篇分享一个简单轻松的内容: 剖析 Flutter 里的动画技巧 ,首先我们看下图效果,如果要实现下面的动画切换效果,你会想到如何实现?事实上 Flutter 里实现类似的动画效果很简单,甚至不需要自定义布局,只需要通过官方的内置控件就可以轻松实现。首先我们需要使用 和 :接着我们定义一个 ,将 和 嵌套在一起,并且通过 用于改变它们的位置和大小。之后我们只需要把 放到通过 下,然后通过 获得 的大小,根据 调整 的位置和大小,就可以轻松实现开始的动画效果。如下图所示,只需要
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注