如何减少APK包的大小

减小release安装包体积,尝试瘦身 问题: release包编译出来的体积在53.9M,有些大,所以想着对安装包进行瘦身!!! 目前安装包为:53.9MB 解决方案: 1、第一阶段 找到项目中所有的图片资源、jar文件、so库、aar文件、音频文件、js文件,能删除的删除、能优化的优化、能压缩的压缩。 图片: https://tinypng.com/ 这个网站对图片的处理,非常友好,图片质量肉眼看着无差别,但... 阅读详情

最近开发完公司的项目,和IOS的哥们一起上线,发现IOS的包大小近20M,而Android的安装包仅9M,过大的下载包可能会降低新用户的下载兴趣,所以适当减少安装包的大小还是很重要的。

1.使用ProGuard混淆

ProGuard包括以下4个功能:
压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。
优化(Optimize):对字节码进行优化,移除无用的指令。
混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。
预检(Preveirfy)。

混淆环节会用无意义的短变量去重命名类、变量、方法。这些步骤让代码更精简,更高效,也更难被逆向(破解)。

2.开启shrinkResources

移除无用的资源,但是可能会造成:specified for property 'resourceFile' does not exist. 慎用!

3.使用resConfigs "zh"

删除无用的语言资源。google给我们的apk提供了国际化支持,如适应不同语言的字符串资源等等,但是在很多情况下我们只需要一些指定语言的资源就可以了,这个时候我们可以使用resConfigs方法来配置。

4.对于非透明大图,png转化为jpg格式

5.使用shape文件代替一些背景图片

6.切图最多使用两套,使用主流分辨率

7.限制app支持的cpu架构的数目


让你的app支持 armabi 和 x86 架构就够了。如果你的项目有sina分享或者百度地图SDK,他们有7中CPU架构的so库,如果全部放到项目中,就只能呵呵了。


另外,Android Studio在2.2以后提供了一个Apk分析器,能够查看Apk文件的组成部分一起各自大小所占的比重,有兴趣的同学可以研究一下。使用方法:



Android开发:Apk结构分析及减少包大小 作者:Hanking 前言 apk的大小对于下载apk应用的用户多少有直接的影响,由于手机内存的限制和网络环境的限制,同一个应用随着apk越大下载的和使用的人数就会越少,所以减少apk的大小是非常重要的。本文从apk编译过程,apk的组成,apk大小减少的方法三个方面分析如何减少apk的大小 一、apk的编译过程 在构建过程中,Android项目会被编译,打包,生成.apk文件,apk文件包含... 阅读详情

相关推荐

别让你的URDF模型在Gazebo里‘躺平’:手把手教你配置libgazebo_ros_diff_drive插件让两轮小车动起来

本文详细解析了如何在Gazebo中配置libgazebo_ros_diff_drive插件,使两轮小车模型实现动态仿真。从URDF模型到传动装置,再到差速驱动插件的精细调参,手把手教你解决机器人‘躺平’问题,提升ROS1与Gazebo仿真的实战能力。

weixin_42552716的博客 334

[Android]解决Android Studio导出APK文件过大的问题

使用Android Studio导出最简单的Hello World程序竟然有3MB! 我用Eclipse导出Hello World也就几百KB左右…… 这不科学……经过一番探索,终于找到了原因,Android Studio创建项目的时候会自动添加依赖,这些依赖导致最后导出的APK文件过大,解决办法如下: 单击菜单栏“File”-“Project Structure” 单击“Dependencies”-“app”,那里的依赖全部删除即可(除非你知道哪些依赖你需要用!) 附:无需依赖包检测APP是否存在

YuXiang187的博客 4287

网闸的基本配置

本文详细介绍了网闸的基本配置流程,包括物理连接与初始化、网络基础配置、核心数据交换策略配置、安全增强配置、管理与运维以及测试验证等关键步骤。网闸通过在物理隔离环境下建立"数据摆渡通道",实现特定业务数据的安全交换。配置时应遵循最小化、单向化、内容控制和审计原则,确保只开放必要通道,优先采用单向传输,进行内容安全检查并记录操作日志。不同厂商网闸的配置界面可能不同,但核心逻辑是相通的。

qq_39980997的博客 1843

AndroidStudio 导出AAB格式上传谷歌提示超过150M 解决方案

AndroidStudio 导出AAB格式上传谷歌提示超过150M 解决方案 这里原因是因为aab里base文件夹太大了 导致他用base文件夹来做基础apk就会很大(150M以内) 不是指aab文件大小哦 如下图所示 解决方案 把base里的资源拆到其他的module里作为install-pak 也就是谷歌推出的PAD 资源包解决方案 对你的android studio 工程 右键 新建一个module 我这里是选 android library 点击next 创建 名字无所谓 后面

qq_32756581的博客 9531

从拧螺丝到精密装配:三菱伺服电机扭矩控制在工业自动化中的实战解析

本文深入解析三菱伺服电机扭矩控制在工业自动化中的实战应用,重点介绍MR-J4系列伺服系统的高精度扭矩响应技术。从螺丝紧固到精密装配,详细讲解扭矩控制模式的选择、硬件配置、参数设置及典型故障排查方案,帮助工程师提升生产效率和产品质量。

weixin_29186249的博客 471

告别踩坑!S32K3xx芯片上RTD-SDK的DFLASH与FEE模块配置全流程(基于S32DS)

本文详细解析了在NXP S32K3xx系列MCU上配置RTD-SDK的DFLASH与FEE模块的全流程,基于S32DS开发环境。从Cache配置、Mem_43_InFls模块设置到MemAcc模块的三种调用模式,提供了实战代码示例和常见问题排查表,帮助开发者高效完成存储管理配置,避免常见错误。

weixin_42653691的博客 269

Springboot项目减少打包大小

前言: Springboot项目使用maven进行打包时,最小包也要二十几兆。如果遇到频繁需要上线的情况时,上传会非常浪费时间,我们需要适当减少包的大小,减少上传时间。经过分析,我们自己写的代码经过编译之后,顶多几百KB,非常小。包中占大部分的是引用的架包,如果我们可以把引入的架包移除,就可以解决包过大的问题。 正文: 所有的修改都在pom.xml文件中完成,大概可以分为三步:1.生成的jar中,不要包含pom.xml和pom.properties这两个文件;2.拷贝依...

hanxiaozhang的博客 1858

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9210

利用base64下载文件,以及它因文件过大无法下载的问题

接口返回结果如此 代码 exportByBase64(response) { // const bloburl = dataURIToBlob(response.file) var downloadElement = document.createElement("a"); // downloadElement.href = URL.createObjectURL(bloburl); downloadElement.href = response.fil

ichLiebDich的博客 3127

国产操作系统替换方案:3个避坑指南

坑核心误区避坑核心原则关键动作坑一:选型只看信创信创目录=唯一标准兼容性优先,信创是约束三维评估(兼容性+信创+生态),分场景选型坑二:迁移只管能跑功能能跑=迁移成功性能确认+运维回归适配-压测-回归三阶段,基线对比坑三:不防二次迁移解决停服=完成任务一步到位,两级兼容信创路线优先,双轨制发布,终态规划。

weixin_43524706的博客 299

基于Simulink进行步进电机的重复控制仿真建模

重复控制概述目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

amy_mhd的博客 268

ue4 从小到大_UE4 减少APK包的大小

本文依据官方文档 Reducing APK Package Size整理而来,不过我会陆续添加自己减少包大小的心得。ETC1 纹理当使用ETC1打Android包时,注意ETC1是不会压缩带Alpha通道的纹理的。当你的纹理需要Alpha通道而又不得不使用ETC1压缩时,可以使用两张分开的纹理,一张颜色一张存放Alpha值。创建一个空的项目创建新的工程时,不要带初学者内容,如果要使用的话使用UE4...

weixin_28782251的博客 995

PyTorch深度学习实战(47)——使用PyTorch构建Transformer模型

相较于传统模型,如循环神经网络 (RNN),Transformer 的优势在于能够理解输入和输出序列中元素之间的关系,在大语言模型 (如 ChatGPT 和 DeepSeek) 的发展中起到了关键作用,为了从零开始构建 Transformer,首先探讨自注意力机制,包括查询 (query)、键 (key) 和值 (value) 向量,以及缩放点积注意力 (SDPA)。将层归一化和残差连接集成到多头注意力层中,并与前馈层结合,构建编码器层,堆叠编码器层构建编码器,还将实现 Transformer 中的解码器。

盼小辉丶的博客 3万+

性能优化之减少apk包大小

首先先说下Apk包大小优化的好处: 1,减少app内存使用 2,用户在应用市场下载安装时,往往会将apk的大小作为一个考虑因素 下面分享我以往的优化经验: 1,使用svg 使用svg可以减少少量包体积, 使用Android studio 可以直接导入svg文件,需要注意的是:PSD不支持渐变和透明度 批量导入svg:svg2vector.jar 将svg图片生成为指定维度的png图...

xzq823211673的博客 387

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【腾讯Bugly干货分享】Android减包 - 减少APK大小

本文是对Google官方文档 Reduce APK Size 的翻译,点击“阅读原文”可以查看英文原文。 译者简介:damonxia(夏正冬),天天P图Android工程师 用户经常会避免下载看起来体积较大的应用,特别是在不稳定的2G、3G网络或者在以字节付费的网络。这篇文章描述了怎样减少你的APK大小,这会让更多的用户愿意下载你的应用。理解APK的结构在讨论怎样减少应用大小之前,先了解A

腾讯Bugly的专栏 5138

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

UE4 减少APK包的大小

本文依据官方文档 Reducing APK Package Size整理而来,不过我会陆续添加自己减少包大小的心得。 ETC1 纹理 当使用ETC1打Android包时,注意ETC1是不会压缩带Alpha通道的纹理的。当你的纹理需要Alpha通道而又不得不使用ETC1压缩时,可以使用两张分开的纹理,一张颜色一张存放Alpha值。 创建一个空的项目 创建新的工程时,不要带初学者内容,如果要使...

weixin_30556959的博客 378

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android 减包 - 减少APK大小

(转载)http://www.10tiao.com/html/330/201704/2653578978/2.html 2017-04-27 18:31 夏正冬 本文来自“天天P图攻城狮”公众号(ttpic_dev) 本文是对Google官方文档 Reduce APK Size 的翻译,点击“阅读原文”可以查看英文原文。 译者简介:damonxia(夏正冬)

zhuhai__yizhi的专栏 725

减少apk包大小的一种思路

现在apk大小主要是决定于两个:一个是图片一个是.SO文件(这个尽量用release包),而对于图片,既要越小,又要保持质量。 之前是PNG --> JPG, 现在直接是PNG ---> webp, or jpg-->webp 对于50KB以上的图,质量80%的话,都有2/3的压缩 大赞啊 只要android 4.0+(level >= 17)都可以的 但是有些...

weixin_30399821的博客 80

如何减少APK 包的大小

一. gradle 中设置 1.1 开启minifyEnabled : 开启混淆,删除没用的java文件 1.2 开启shrinkResources : 去除无用资源 1.3 resConfig “zh”删除无用的语言资源 二.对图片的处理 2.1 使用tinpping 有损压缩,可以对png图片压缩 2.2 对于非透明的大图,png-&gt;jpp 2.3 使用webp 格式 ...

qianyedoufulao的博客 776

android 减少包的大小,android进阶篇10、APK包大小优化-一一网络

一、apk结构介绍APK 文件由一个 Zip 压缩文件组成,其中包含构成应用的所有文件。这些文件包括 Java 类文件、资源文件和包含已编译资源的文件。APK 包含以下目录:META-INF/ :包含 CERT.SF 和 CERT.RSA 签名文件,以及 MANIFEST.MF 清单文件。assets/ :包含应用的资源;应用可以使用 AssetManager 对象检索这些资源。res/:包含项目...

weixin_42382558的博客 611

真Unity3d_减少包大小i或者压缩apk体积的几个方法

Unity3d能不能减少打包的大小呢 理论上不能减少体积,王者荣耀2天不登录就要下载2G的内容,如果那么容易,会是这样的结果吗?? 能减少加载的时间,分层加载和释放,就已经很不错了,别人家优化的目标不在于减少体积 我们就姑且看看一些理论的减少包的方法吧: 包大小减少的几个方法 StreamingAssets目录不要有任何东西 Resource目录不要有任何东西 BuildSetting里面的Scene保持只有一个 不要在场景内挂GameObject属性的脚本(传统

大话程序员 2136

如何做到将apk大小减少6M

我们的apk去年业务需求增长迅速,伴随而来的是apk大小由年初的20M以下,增长到年底的30M。 包大小增长的坏处有: 过大的下载包会降低新用户的下载兴趣增加下载安装中失败的风险提高各个渠道下载发布的成本(渠道是会根据你的包大小设置收费规则的) 因此,减少包大小的工作看上去不痛不痒,其实还挺重要的。 接下来,我将分享下我在包大小瘦身方面的努力。 技术列表 l

Litchi的专栏 2603
上一篇: 推荐:Android studio无线调试插件ADB WIFI
下一篇: 百度地图画圈搜索功能探索
高速蜗牛a
博客等级 码龄15年 14粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值