Android 压缩资源不会改变 APK 大小

Posted

技术标签:

【中文标题】Android 压缩资源不会改变 APK 大小【英文标题】:Android Compressing resources makes NO change in APK size 【发布时间】:2013-01-07 11:18:42 【问题描述】:

我们正在为我的 android 应用程序进行尺寸优化。

然而,在我们显着减少资源文件夹的大小后,将其减少了 8mb,当我编译(使用 maven)时,应用程序的大小仅减少了 0.1mb。

有人可以解释为什么会这样吗?

我在进行 zipaligning,但这一切都在 pom.xml 中。

这里是 pom 的构建段

    <build>

    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.2.0</version>
            <extensions>true</extensions>

            <configuration>
                <!-- replace resources with target specific -->


                <renameManifestPackage>$customerPackage</renameManifestPackage> 
                <resourceOverlayDirectory>$customerResources</resourceOverlayDirectory>

                 <sign>
                    <debug>false</debug>
                 </sign>
                  <manifest>
                    <versionCodeAutoIncrement>true</versionCodeAutoIncrement>
                  </manifest>
                   <zipalign>
                    <inputApk>$project.build.directory/$project.build.finalName.apk</inputApk>
                    <outputApk>$project.build.directory/outputfile.apk</outputApk>
                 </zipalign>

               <proguard>
                    <skip>true</skip>
                </proguard>

                <sdk>
                    <!-- platform or api level (api level 4 = platform 1.6)-->
                    <platform>17</platform>
                </sdk>
                <assetsDirectory>$project.basedir/$customerAssets</assetsDirectory>
                <resourceDirectory>$project.basedir/res</resourceDirectory>
            </configuration>

            <executions>
                <execution>
                    <id>manifestUpdate</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>manifest-update</goal>
                    </goals>
                </execution>
                <execution>
                    <id>alignApk</id>
                    <phase>package</phase>
                    <goals>
                        <goal>zipalign</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jarsigner-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <id>signing</id>
                    <goals>
                        <goal>sign</goal>
                    </goals>
                    <phase>package</phase>

                    <inherited>true</inherited>
                    <configuration>
                        <archiveDirectory></archiveDirectory>
                        <includes>
                            <include>target/*.apk</include>
                        </includes>
                        <keystore>../certificates/mycertificate.keystore</keystore>
                        <storepass>*******</storepass>
                        <keypass>******</keypass>
                        <alias>myalias</alias>

                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
              <skip>true</skip>
            </configuration>
       </plugin> -->

    </plugins>
</build>

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

一个 APK 已被压缩。通过单独压缩您的资源,您所做的所有事情都会减少 APK 压缩阶段的工作量。

这样想,创建一个大文本文件,将其压缩成 zip,您会发现 zip 小得多。

现在将此压缩文本文件压缩到另一个压缩文件中。你希望它更小吗?不,它几乎不会改变,如果有的话会更大。

从高层次上讲,这与压缩资源基本相同,然后要求 APK 再次压缩所有资源。

【讨论】:

以上是关于Android 压缩资源不会改变 APK 大小的主要内容,如果未能解决你的问题,请参考以下文章

java怎样获取apk文件icon图标

Unity如何打包Apk能压缩资源

Android压缩图片和libjpeg库

android 怎么样的资源要放在assets

Android性能优化 - apk包体优化

理解使用Gradle编译打包Android apk