iOS 功能类

Android iOS App代理包一键生成

2018-07-27  本文已影响175人  Oort

APP快速打代理包工具

前言:
代理包可以快速帮助推广运营进行多渠道分发:


上效果图

Jietu20180727-103944.jpg

注意事项

  1. Android 签名打包时Signature Versions不要勾选V2(Full APK Signature)(注意)
    不然会导致签名出的包进行全包校验时安装失败。(由于打包时会将文件写入Apk中,Apk文件sha256变化之后 签名文件认证不过通)
  2. ios 可以使用企业签名包签出原始包进行打包
  3. Android签过之后的包不能再签,需要改Python代码

使用方式

Android代码

   /**
     * 从apk中获取版本信息
     *
     * @param context
     * @param channelPrefix 渠道前缀
     * @return
     */
    public static String getChannelFromApk(Context context, String channelPrefix) {
        //从apk包中获取
        ApplicationInfo appinfo = context.getApplicationInfo();
        String sourceDir = appinfo.sourceDir;
        //默认放在meta-inf/里, 所以需要再拼接一下
        String key = "META-INF/" + channelPrefix;
        String ret = "";
        ZipFile zipfile = null;
        try {
            zipfile = new ZipFile(sourceDir);
            Enumeration<?> entries = zipfile.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = ((ZipEntry) entries.nextElement());
                String entryName = entry.getName();
                if (entryName.startsWith(key)) {
                    ret = entryName;
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (zipfile != null) {
                try {
                    zipfile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        String[] split = ret.split(channelPrefix);
        String channel = "";
        if (split != null && split.length >= 2) {
            channel = ret.substring(key.length());
        }
        StorageLW.getSingleton().put(StorageKEY.APP_CHANNEL, channel);
        return channel;
    }

iOS使用方式

    /*! 读取渠道ID */
    + (NSString *)channel{
       NSString *resourceDirectory = [[NSBundle mainBundle] resourcePath];
       NSString *CodeSignaturePath = [resourceDirectory stringByAppendingPathComponent:@"/_CodeSignature/AppInfo.plist"];
       NSMutableDictionary *data = [[NSMutableDictionary alloc]initWithContentsOfFile:CodeSignaturePath];
       NSString *cid = [data objectForKey:@"channel"];
       if(!cid){
           cid = @"";
       }
       return cid;
    }

实现原理

使用区域网服务器作为下载服务器,如果要使用iOS扫描下载安装。则需要修改本地python代码 搭建本地https环境 创建CA证书安装到iPhone上

使用Python 源码 需要安装依赖库

源码

上一篇下一篇

猜你喜欢

热点阅读