Android APK瘦身大法——SVG图片瘦身

前两天和上家公司的上司无意聊了聊工作的事,也就顺便扯到了apk瘦身上。主要是通过SVG进行图片压缩来减少app的大小。下面我就详细介绍一下如何实现SVG的图片压缩。

SVG的优点

  1. SVG 可被非常多的工具读取和修改(比如记事本),由于使用xml格式定义,所以可以直接被当作文本文件打开,看里面的数据;
  2. SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强,SVG 图就相当于保存了关键的数据点,比如要显示一个圆,需要知道圆心和半径,那么SVG 就只保存圆心坐标和半径数据,而平常我们用的位图都是以像素点的形式根据图片大小保存对应个数的像素点,因而SVG尺寸更小;
  3. SVG 是可伸缩的,平常使用的位图拉伸会发虚,压缩会变形,而SVG格式图片保存数据进行运算展示,不管多大多少,可以不失真显示;
  4. SVG 图像可在任何的分辨率下被高质量地打印;
  5. SVG 可在图像质量不下降的情况下被放大;
  6. SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图);
  7. SVG 可以与 Java 技术一起运行;
  8. SVG 是开放的标准;
  9. SVG 文件是纯粹的 XML;

SVG的使用

安装软件

首先我们需要安装一款软件 Vector magic

下载完成后解压,如下:

我们在keygen 1.15里双击复制第五行进行破解,因为我这边已经破解过了就不展示了。

瘦身测试

现在我们来做一个测试,首先,原图大小如下:

1.34M,这个背景图其实已经不小了。接下来我们把他通过svg进行压缩成xml。

我们直接打开软件,打开我们要进行压缩的图片。

直接点击全自动,当然你们也可以自己设置。

这样我们就压缩好了。点击完成,我们将他进行保存。

记得后缀名设置成svg 因为默认的好像不是它。压缩完了。我们看下大小,可是直接少了2/3呢。

最后我们把他放到android studio 或者IntellJ Idea中。

然后是这样:

实现真正的瘦身

注意了。这只是个测试。还是用大图测试的,所以比较明显,那我现在用之前的五子棋来完成完整的测试。首先看下我的图片资源是经过适配的。

在来看看我们没瘦身之前APK的大小。

一个五子棋7M功能也不多,估计也没人下载把。。下面重点到了。我们把所有资源通过svg进行压缩。压缩完是这样的。因为svg是xml文件,所以我们并不需要去做适配。

想知道瘦身之后的大小了。下面我就揭晓答案把。

没错,一个原本6.89M的app就光通过图片压缩变成了3M。当然我们还可以通过别的形式来进行图片压缩,不过个人爱好而已。

SVG的适配

首先我们需要知道的是svg只适合5.0以上的手机,但我们做适配一般都要兼容到4.0。虽然现在4.0的用户很少。我妈手机都6.0了~虽然我的才是5.0~~~

你在创建vector xml的同时Vector Asset Studio工具同时在不同的dpi文件中会生成相应的png图片。如图:

这样就发挥不出vector drawable的优势了。(因为这样引用的其实就是png图片而已)这时候就要使用支持库了。下面讲解支持库的使用。

使用vector drawable的两种方式

1、如果你的工程minimum API level大于等于21

正常使用没有任何关系

2、如果你的工程minimum API level小于21,你仍然要使用vector drawable的话就必须使用支持库Support Library 23.2 or higher。

这里有几点需要注意:

(1)首先你的activity必须继承AppCompatActivity

(2)其次在你的 module的build.gradle中根据Android Plugin Gradle版本的不同需要加上这几句:

对于Android Plugin for Gradle 2.0 or higher需要加上:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile ‘com.android.support:appcompat-v7:23.2.0‘
}

对于Android Plugin for Gradle 2.0以下需要这样:

android {
  defaultConfig {
    // Stops the Gradle plugin’s automatic rasterization of vectors
    generatedDensities = []
  }
  // Flag to tell aapt to keep the attribute ids around
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

(3)在应用vector drawable的时候需要这样写,加入有一个ImageView要应用一个叫做test的vector drawable:

 <ImageView
        android:id="@+id/img_animated_vector"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        app:srcCompat="@drawable/test"/>

这样我们的适配就算真正的完成了。

当然,对于apk的瘦身还有好多种,以后有时间我会在我所知道的范围内来一一介绍。

时间: 2024-08-24 10:08:45

Android APK瘦身大法——SVG图片瘦身的相关文章

Android APK瘦身全面总结——如何从32.6M到13.6M

前言 之前我简单介绍了关于svg图片瘦身的问题,在公司,瘦身这个问题是我提出来的,所以这锅我背了.公司项目是32.6M,我给自己的要求就是低于20M.上周花了一个星期瘦身,至于为什么花了一周,主要是svg适配问题我被搞蒙蔽了.然后发现还要改大量代码,想想也就算了,又换了另一种瘦身方法. 很多人是因为这标题而来的,怎么可能,32.6M的居然可以变成13.6M.下面容我慢慢道来. APK结构介绍 classes.dex classes.dex是Java源码编译后生成的java字节码文件.但由于And

Python在七牛云平台的应用(二)图片瘦身

(一)七牛云平台的图片瘦身功能简介:(引用自官网) 针对jpeg.png格式图片 瘦身后分辨率不变,格式不变. 肉眼画质不变. 图片体积大幅减少,节省 CDN 流量 官网给的图片压缩率很高,官网给的「葡萄」图片瘦身在不改变分辨率和格式的情况下压缩率为65.49%,我自己测试了一张小图在后文中会有,原来的大小在「22kb」压缩后为「18kb」,据一般情况来看,压缩率虽然没有官网给的那么夸张,但是也能基本达到80%左右,所以这个压缩率还是很不错的. (二)需求分析 我们可以设想几个场景 『1:当你在

iOS图片瘦身总结

前言 最近在公司写了个小程序来为iOS应用中的图片瘦身,进而减小APP大小,减少用户下载时的流量. 瘦身是在一个专门为图片瘦身的网站进行的. 地址:https://tinypng.com 这个网站提供的接口是基于https协议的,之前没有怎么用过https协议,现在一并总结一下. 关于HTTPS https协议基础请参考参考: HTTPS的七个误解 其实HTTPS就是安全版本的http协议, 他采用了RSA非对称加密公私钥对,使用SSL证书验证保证了用户数据在传输时的安全行. 下面简单看一下ht

Android应用性能优化系列视图篇——SVG图片版本兼容及性能优化解决方案

SVG矢量图在图片表现力方面远远优于PNG位图,同时在可维护性和修改性方面也比位图要方便很多.尽管Android在5.0版本就引入了SVG图片的解决方案:Vector.然而,兼容性和性能方面却是差强人意,以至于至今都未能广泛使用. 本篇博客给大家带来一套较为不错的解决方案:SVG-Android(作者是本人...),相比于Vector,其在兼容性方面能够兼容到2.3以上,同时在性能方面,也有了质的提升. 开源库地址:https://github.com/MegatronKing/SVG-Andr

反编译Android APK及防止APK程序被反编译

原文出处 反编译Android APK及防止APK程序被反编译 怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它 的做法,同时啊,还可以借鉴别人的软件结构,资源文件:作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.此方式主要目的是为了促进开发者学习,借鉴好的代

Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38140505 自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gallery的效果,但是HorizontalScrollView存在一个很大的问题,如果你仅是用来展示少量的图片,应该是没问题的,但是如果我希望HorizontalScr

Android APK反编译详解(转)

转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件.   本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x

cocos2d jsb 打包 Android APK

1.首先要会普通的cpp 打包成Android APK 以下所说的是在cocos2d-x 2.2.2 或者 2.3 版本中.本文在Eclipse总用ndk编译cocos2d-x. 老生常谈cocos2d-x JSB不是简单的js代码,涉及到C++代码,如果是Android的话又涉及到Java代码,有点复杂,如果搞过Android下的Jni的话会熟悉些.可以看下这篇文章:<Android Jni 例子 Hello JNI,ndk> Android为了提高开发者开发应用的速度,降低难度,选择了Ja

Android APK反编译

一.apk反编译得到程序的源代码.图片.XML配置.语言资源等文件 打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:apktool.bat d -f  test.apk  test(命令中test.apk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为: 二.Apk反编译得到Java源代码 在命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat   classes.dex在改目录下会生成一个classes_dex2ja