apk大小压缩 ,混淆,Gradle配置多渠道包

APK 组成以及大小压缩优化:参考  https://www.jianshu.com/p/a0db5e588506

app组成结构

    META-INF/:包含CERT.SF和CERT.RSA签名文件以及MANIFEST.MF 清单文件

   assets/:包含应用可以使用AssetManager对象检索的应用资源。

   res/:包含未编译到的资源 resources.arsc。

  lib/:包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,      x86_64,和mips。

  resources.arsc:包含已编译的资源。该文件包含res/values/ 文件夹所有配置中的XML内容。打包工具提取此XML内容,将其编  译为二进制格式,并将内容归档。此内容包括语言字符串和样式,以及直接包含在*resources.arsc8文件中的内容路径 ,例如布局文件和图像。(包括 :R.java和resources.arsc,生成的工具是aapt)

classes.dex:包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类。(Android运行的是dex文件,java是.class文件)

AndroidManifest.xml:包含核心Android清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用Android的二进制XML格式。

apk  大小优化

       1 :减少dex文件大小

           shrinkResources为true表示移除未引用资源,和代码压缩协同工作。

           minifyEnabled为true表示通过ProGuard启用代码压缩,配合proguardFiles的配置对代码进行混淆并移除未使用的代码。

            代码混淆在压缩apk的同时,也提升了安全性

     2:减少res,压缩图文文件:

       图片文件压缩是针对jpg和png格式的图片。我们通常会放置多套不同分辨率的图片以适配不同的屏幕,这里可以进行适当的  删减。在实际使用中,只保留一到两套就足够了(保留一套的话建议保留xxhdpi,两套的话就加上hdpi),然后再对剩余的图片 进行压缩(jpg采用优图压缩,png尝试采用pngquant压缩)

同时android 为了适配国际化,app的value 对应数据只需要配置对应得语言

3:减少lib文件大小:

     由于引用了很多第三方库,lib文件夹占用的空间通常都很大,特别是有so库的情况下。很多so库会同时引入armeabi、armeabi-v7a和x86这几种类型,这里可以只保留armeabi或armeabi-v7a的其中一个就可以了,实际上微信等主流app都是这么做的。

APK 代码混淆:

    博客连接 : https://www.jianshu.com/p/cba8ca7fc36d

     https://blog.csdn.net/sdfsdfdfa/article/details/81058270

前言介绍:

Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现----》由于代码混淆用简单抽象的单词代替原有长而通俗易懂的代码,因而减少APK的体积

另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源----》Gradle为Android提供的插件,能将项目中未使用的资源安全移除,大大减少APK体积

出现问题:

    proguard-android.txt ---->默认 ProGuard 配置文件 (proguard-android.txt) 足以满足需要,ProGuard 会移除所有(并且只会移除)未使用的代码。但是,ProGuard可能会移除应用真正需要的代码

    当应用引用的类只来自 AndroidManifest.xml 文件时;
    当应用调用的方法来自 Java 原生接口 (JNI) 时;
    当应用在运行时(例如使用反射或自检)操作代码时。

    继承某个Activity, 但是Activity内部类混淆导致程序崩溃

    json转换成某个包下的 model 后,这个包被混淆了,那么解析json 可能会出错

APK 多渠道打包:

    前言   参考 https://github.com/Meituan-Dianping/walle  

       在安装包中添加不同的标识,配合自动化埋点,应用在请求网络的时候携带渠道信息,方便后台做运营统计,比如说统计我  们的应用在不同应用市场的下载量等信息,或者不同版本app 上架不同应用市场等

   1: 在manifest.xml文件中配置动态渠道变量

2 :接着在app目录下的build.gradle中配置productFlavors,也就是配置打包的渠道

3: 根据配置的打包渠道,通过gradle命令,输出不同渠道的app

  执行./gradlew assembleRelease ,将会打出所有渠道的release包

执行./gradlew assembleVIVO,将会打出VIVO渠道的release和debug版的包

执行./gradlew assembleVIVORelease将生成VIVO的release包

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 开发中,Gradle 是一个非常重要的构建工具,可以用来构建和打 Android 应用程序。Gradle 插件是一种工具,可以扩展 Gradle 的功能,使其能够支持更多的功能。而多渠道Android 应用程序开发中非常重要的一个方面,它可以让我们将应用程序打成不同的版本,并发布到不同的应用商店或市场上。 在 Android Studio 中,我们可以通过自定义 Gradle 插件来实现多渠道,具体步骤如下: 1. 创建 Gradle 插件项目 在 Android Studio 中创建一个新项目,选择 Gradle 插件项目模板。这将创建一个 Gradle 插件项目,并生成一些默认的代码和文件。 2. 实现多渠道 在插件项目中,我们需要实现多渠道的功能。这可以通过 Gradle 的 productFlavors 和 buildTypes 配置来实现。我们可以定义多个 productFlavors,并为每个 productFlavor 配置不同的参数,例如应用程序的名、应用程序名称等。在 buildTypes 中,我们可以为每个 buildType 配置不同的参数,例如应用程序的版本号、是否开启混淆等。 3. 打应用程序 在插件项目中,我们可以编写一个 Gradle 任务来实现应用程序的打。这个任务可以使用 Gradle 提供的 assemble 任务来实现。我们可以为每个 productFlavor 和 buildType 配置不同的打参数,并使用 Gradle 的 assemble 任务来生成应用程序的 APK 文件。 4. 发布应用程序 在插件项目中,我们可以编写一个 Gradle 任务来实现应用程序的发布。这个任务可以使用 Gradle 提供的 uploadArchives 任务来实现。我们可以为每个 productFlavor 和 buildType 配置不同的发布参数,并使用 Gradle 的 uploadArchives 任务将应用程序发布到不同的应用商店或市场上。 总的来说,自定义 Gradle 插件多渠道Android 应用程序开发中非常重要的一个方面。通过自定义 Gradle 插件,我们可以实现更加灵活和高效的应用程序打和发布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值