Android与iOS包体优化及一键自动打包脚本

现在我来详细讲解“Android与iOS包体优化及一键自动打包脚本”的攻略,具体步骤如下:

一、Android与iOS包体优化

1. Android包体优化

1.1 压缩图片

在Android开发中,经常会用到很多图片资源,如:icon、banner、背景等,而图片资源一般占用的空间比较大,因此,对图片资源进行压缩可以有效地减小APK的体积。
使用Android Studio自带的工具“Image Asset Studio”可以生成各种格式的图标资源,同时也可以自动进行图片压缩。
在项目中加入ImageOpt两个插件以及IntellijIDEA插件,利用这两个插件即可自动将项目中的所有图片进行压缩。

1.2 混淆代码

在Android打包发布时,一定要进行代码混淆,避免逆向工程,使恶意用户无法轻易地解析出代码。
在Android Studio中,默认提供了Proguard混淆工具,只需要在app的build.gradle文件中作如下配置即可:

buildTypes {
    release {
        minifyEnabled true //开启混淆
        shrinkResources true //瘦身,去除无用资源
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

1.3 移除无用资源

Android 打出的安装包中一般会包含有很多无用的资源,如:长时间未使用的图片、多余的代码文件、一些多余的库等等,这些就会大大增加APK的大小。
使用AndroidStudio自带的“shrinkResources”属性以及资源混淆工具ProGuard可以自动移除无用资源,从而减小APK大小。

2. iOS包体优化

iOS打包的主要工具Xcode会在打包时进行代码优化、资源压缩等操作,因此一般情况下只需要注意以下两点即可。

2.1 移除无用资源

iOS中每个类库和资源都可能会导致项目的二进制文件变大,我们可以使用LS Unused Resources工具来查找和删除无用的图片、xib、storyboard等文件。

2.2 禁用Bitcode

Bitcode是一种针对iOS应用优化的编译形式,“Bitcode Enable”开启时可以优化应用包体,减少开发者上传的大脑的大小,但是可能会带来一些编译的问题。因此,在打包时通常建议用户禁用Bitcode。

二、一键自动打包脚本

在进行自动化打包时,下面的脚本可供参考:

#!/bin/bash

# 工程路径,代码需要根据自己的实际路径配置
WORKSPACE_PATH="/Users/username/Projects/MyWorkspace/MyApp.xcworkspace"
SCHEME_NAME="MyApp"
CONFIGURATION="Release"
IPA_NAME="MyApp.ipa"
EXPORT_OPTIONS_PLIST="./exportOptions.plist"

# 清空缓存
xcodebuild clean -workspace ${WORKSPACE_PATH} -scheme ${SCHEME_NAME} -configuration ${CONFIGURATION}

# 更新并检查pods
pod update

# 编译代码
xcodebuild archive -workspace ${WORKSPACE_PATH} -scheme ${SCHEME_NAME} -configuration ${CONFIGURATION} -archivePath ${IPA_NAME}

# 打包生成ipa
xcodebuild -exportArchive -archivePath ${IPA_NAME} -configuration ${CONFIGURATION} -exportPath ./${IPA_NAME} -exportOptionsPlist  ${EXPORT_OPTIONS_PLIST}

该脚本主要实现了以下功能:

  1. 清空缓存:使用xcodebuild的clean命令清空缓存
  2. 更新并检查pods:使用pod update更新pods并检查是否有更新
  3. 编译代码:使用xcodebuild的archive命令编译代码并生成.xcarchive文件
  4. 打包生成ipa:使用xcodebuild的exportArchive命令根据.xcarchive文件生成ipa包,并使用exportOptionsPlist指定导出ipa时的配置。

示例说明

  1. 假设一个Android应用中有很多40M以上的图片,我们可以使用ImageOpt插件自动将图片进行压缩,并在ProGuard混淆工具中使用移除无用资源功能来瘦身,从而减小APK的大小。

  2. 假设一个iOS应用中使用了一些第三方库和资源,这些内容在打包时会导致二进制文件变大,我们就需要使用LSUnusedResources工具来查找并删除无用的类库和资源文件,以优化应用的包体大小。并且,在打包时,可以禁用Bitcode来减小包体大小。

以上就是Android与iOS包体优化及一键自动打包脚本的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android与iOS包体优化及一键自动打包脚本 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • TypeScript 学习笔记之 typeScript类定义,类的继承,类成员修饰符

    TypeScript 学习笔记之 typeScript类定义,类的继承,类成员修饰符 类的定义 TypeScript 是 JavaScript 的超集,所以它具有 JavaScript 的所有语法,并且添加了一些新的特性。在 TypeScript 中,我们可以使用类来定义对象,它们是创建对象的蓝图,可以描述对象的属性和方法。 类的语法 类的语法如下所示: c…

    other 2023年6月26日
    00
  • 安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御

    安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御 什么是 CSRF 攻击? CSRF(Cross-Site Request Forgery)中文名为跨站请求伪造,也叫 XSRF,是一种常见的Web攻击方式之一。攻击者在受害者不知情的情况下,利用受害者已登录的身份,在受害者不知情的情况下,完成恶意操作,如转账、修改密码、发邮件等等,从而导致安全问题。 …

    其他 2023年3月28日
    00
  • 理解Linux文档属性、拥有者、群组、权限、差异知识点小结

    针对“理解Linux文档属性、拥有者、群组、权限、差异知识点小结”这个主题,我准备了一份完整攻略。具体内容如下: Linux文档属性 Linux文档属性包括文件类型和文件权限两个方面。Linux文件类型有7种,分别是: 普通文件 (regular file):例如文本文件、二进制文件等。 目录文件 (directory file):目录文件表示一个目录,其中…

    other 2023年6月28日
    00
  • iframe高度自适应不要滚动条

    iframe高度自适应不要滚动条 在网页开发中,经常会使用iframe标签来嵌入其他网页或内容。但是,当嵌入的内容高度超过iframe的高度时,会出现滚动条,影响用户体验。本攻略将介绍如何实现iframe高度自适应,不出现滚动条的方法。 方法一:使用JavaScript动态设置iframe高度 使用JavaScript动态设置iframe的高度是一种常见的方…

    other 2023年5月7日
    00
  • SpringBoot整合WebService服务的实现代码

    下面是 SpringBoot 整合 WebService 服务的实现代码的完整攻略。 1. 添加 WebService 相关依赖 在 pom.xml 中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…

    other 2023年6月27日
    00
  • 把DOC文件的默认打开方式设为Office 2003或Office 2007打开方式的切换方法

    让我来为您详细讲解如何将DOC文件的默认打开方式设为Office 2003或Office 2007打开方式的切换方法。 步骤1:右键点击DOC文件,选择“属性”。 步骤2:在打开的“属性”窗口中,选择“打开方式”选项卡。 步骤3:在“打开方式”窗口中,点击“更改”。 步骤4:在弹出的“打开方式”窗口中,选择要设为默认打开方式的Office版本,比如选择“Mi…

    other 2023年6月26日
    00
  • Redis对象与redisObject超详细分析源码层

    Redis对象与redisObject超详细分析源码层 1. Redis对象的定义与结构 Redis对象是Redis中的核心数据结构,用于表示存储在Redis数据库中的键值对。在Redis源码中,Redis对象的定义位于src/redis.h文件中。 Redis对象的结构如下: typedef struct redisObject { unsigned ty…

    other 2023年10月15日
    00
  • C语言数组a和&a的区别讲解

    C语言数组a和&a的区别讲解 在C语言中,数组是一种非常常见且重要的数据类型。而在程序中,我们有时候会涉及到数组和数组地址的问题。本攻略将详细讲解数组a和&a的区别。 数组a的定义及用法 在C语言中,数组是一种由相同数据类型的元素所组成的集合。数组a的定义形式通常为: 类型说明符 数组名[元素个数]; 其中,类型说明符用来说明数组元素的数据类…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部