兰州市2项技术入选2016年度“中国好技术”_励志网

兰州市2项技术入选2016年度“中国好技术”

2018-12-19 01:50 来源:励志网

如果音视频资源被压缩存放在APK中的话,在使用一些音频、视频API时尤其要注意,需要做好充分的测试。

/*theseformatsarealreadycompressed,ordon'tcompresswell*/staticconstchar*kNoCompressExt[]={".jpg",".jpeg",".png",".gif",".wav",".mp2",".mp3",".ogg",".aac",".mpg",".mpeg",".mid",".midi",".smf",".jet",".rtttl",".imy",".xmf",".mp4",".m4a",".m4v",".3gp",".3gpp",".3g2",".3gpp2",".amr",".awb",".wma",".wmv",".webm",".mkv"};可以看出AAPT在资源处理时对这些文件后缀类型的资源是不做压缩的,那是不是可以修改它们的压缩方式从而达到瘦身的效果呢?

笔者在自己的项目中是通过在package${flavorName} Task(感兴趣的同学可以查看源码)之前进行这个操作的。

为了支持Android设备DPI的多样化([l|m|tv|h|x|xx|xxx]dpi)以及用户对高质量UI的期待,美团App中使用了大量的图片,在Android下支持很多格式的图片,例如:PNG、JPG、WebP,那我们该怎么选择不同类型的图片格式呢?在GoogleI/O2016中提到了针对图片格式的选择,来看下图(图片来源于ImagecompressionforAndroiddevelopers):

文件名描述dump.txt APK中所有类文件的内部结构 mapping.txt 提供原始与混淆过的类、方法和字段名称之间的转换,可以通过proguard.obfuscate.MappingReader来解析 seeds.txt 列出未进行混淆的类和成员 usage.txt 列出从APK移除的代码 可以通过在usage.txt文件中看到哪些代码被删除了,如下图中所示android.support.multidex.MultiDex已经被删除了:

    移动互联网信息平台是目前基于移动互联网的最重要的信息平台,通过吸附各类开发者,服务商资源来吸引用户,以智能手机和个人电脑为平台的APP的开发和普及应用,正在为用户人们进入各种媒体内容设立了一个统一的入口(如,微博,微信,网易新闻),并在不同平台上实现了内容的有效对接,达成了某种一致性,媒体类APP呈现出强大的生命力。APP已成为了“媒介机信息”的最佳注脚。

点击图片查看大图

本技巧的使用需要注意以下问题:

3、入驻模式开发所谓入驻,便是需要借助现成的手机App平台,实现开发、发展自己的App.这种做法的优点就是快,无论是开发还是接下来的市场发展,速度都会比前两种效率要高。但是更容易出现同质化的问题,毕竟新闻App在内容上的竞争不多,更多的竞争是来自于App的架构设计以及UI设计。

明智科技认为,目前的新闻手机App软件开发有以下几个模式:

移除掉所有无用或者功能重复的依赖库。

对于JPEG文件,你可以使用packJPG或guetzli等工具将JPEG文件压缩的更小,这些工具能够在保持图片质量不变的情况下,把图片文件压缩的更小。guetzli工具更是能够在图片质量不变的情况下,将文件大小降低35%。

这些优化技巧就不展开介绍了。

【湖南艾尼科技】是专业移动应用APP开发商,专业提供长沙APP开发,APP外包,iOS开发,Android开发,手机APP开发,APP软件开发等相关技术服务,始终致力于移动整体解决方案的策划、设计、开发、发布。网址:

Zip格式优化前面介绍了APK的文件格式以及主要组成部分,通过aaptl-vxxx.apk或unzip-lxxx.apk来查看APK文件时会得到以下信息,见下面截图:

可以使用pngcrush、pngquant或zopflipng等压缩工具来减少PNG文件大小,而不会丢失图像质量。所有这些工具都可以减少PNG文件大小,同时保持图像质量。

1、独立模式开发这个模式应该很容易理解。所谓的独立,指的是这个新闻App应用由媒体经营方自主开发以及运营。新闻App帮助媒体运营商,将以往传统模式的内容以及品牌迁移到移动端,然后借助新闻手机客户端实现媒体自身的移动化的转型。独立模式开发的App的优点比较明显,媒体可以根据自己的需求,设计更加个性化的功能和页面交互的方式。在优点突出的同时,缺点也比较明显,就是这样开发的App的成本较高,以及拉升了市场的入门门槛高度。

互联网让新闻消息不胫而走,但也只是在比较大的,吸引眼球的那些新闻。很多都是第二天便“消失”,而且也没有什么用户评论,更不说是转发或是有深入的跟踪了。新闻行业App的设计上,还是需要以用户体验为主。如使用简单的设计实现阅览新闻的需求,或是能在离线的状态下也能查看,为用户节省流量等。

如果想在Android6.0上开启android:extractNativeLibs=”false”的话,.so文件也不能被压缩,android:extractNativeLibs的使用姿势看这里:AppManifest---application。

针对代码的瘦身还有很多优化的技巧,例如:

#p#分页标题#e#除了对项目代码优化和开启代码压缩之外,笔者在《美团AndroidDEX自动拆包及动态加载简介》这篇文章中提到了通过内联RField来解决RField过多导致MultiDex65536的问题,而这一步骤对代码瘦身能够起到明显的效果。下面是笔者通过字节码工具在构建流程中内联RField的代码片段(字节码的修改可以使用Javassist或者ASM,该步骤笔者采用的是Javassist)。

广州App开发专家表示,随着人们开始重视对时间碎片的利用,手机App的价值得到了有效的提升。每个人都需要了解、学习更多的知识,并通过各种渠道认识这个社会、这个世界。新闻App软件的出现,恰恰是抓住了人们的利用时间碎片学习的习惯,通过新闻手机App可以展现各种各样的新闻资讯。 

【艾尼科技】长沙新闻APP开发公司表示,最近很多客户都在向我们咨询“开发一个新闻APP多少钱”,其实多少钱是没有具体的价格,主要有以下影响的因素:

APK的构成可以用Zip工具打开APK查看。比如,美团App7.8.6的线上版本的格式是这样的:

例如,下面这段来自build.gradle文件的代码用于为发布构建启用代码压缩:

电话:0731-88905650QQ:904649296

【紫鲸互联】广州新闻客户端app开发公司表示,移动互联网已经是人们生活必不可少的东西了,越来越多的新闻app出现和网民的上网习惯的改变,使很多新闻网站不得不开发自己的新闻app客户端来适应移动时代。新闻app客户端开发的背景分析1、碎片化内容需求偏好催生新闻APP传统媒体时代,人们主要通过电视、报纸等渠道获取信息,信息获取相对滞后,且只能被动获取,不能主动选择自己所需要的信息;在PC互联网时代,新闻网站开发之后,通过网络媒介能随时随地采集和发布新闻,迅速传递给受众,实现与受众之间的双向交流;在移动互联网时代,碎片化时间阅读新闻成为网民的主要活动之一,网络新闻的发展主要呈现新闻入口多样化、内容推荐精准化的特点。移动互联环境下,用户接触媒介的时间是零散的,手机上网充斥在日常生活的各种场景中,打车、排队、睡觉前、学习间隙等,因此新闻APP客户端更能满足用户碎片化内容的需求偏好,地方新闻APP满足了用户对本地垂直类资讯的需求。新闻类app客户端的类型1、以门户网站和中央级媒体为代表的全国性移动化产品的垂直落地板块,这类新闻APP的特点是综合各类新闻品种,信息量大,内容更贴近用户的偏好,具有技术先进、运营经验丰富、用户体验较好的优势。2、以技术平台为中介的新闻聚合服务类应用的本地板块,这类新闻APP运营方并不生产媒体内容,主要聚合多家媒体新闻资讯,并根据用户数据进行内容精准推送、互动分享以及个性化定制,实现良好的用户阅读体验。3、地方传统媒体的独立app应用,传统媒体依托自身的信息资源,通过编辑、筛选、加工形成移动应用的主要内容。4、各省市媒体或媒体集团推出的以资讯服务为主的地方综合类app应用。新闻app客户端可以发挥自身优势,通过政策、资源等进行强推,提升用户忠诚度,形成盈利模式,增加用户增值服务,以优质内容进行场景化、碎片化立体覆盖,整合本地移动用户服务类功能,打造本地用户生态体系,拓展本地O2O。广州紫鲸互联是一家专业的新闻客户端app开发公司,品牌APP外包定制,一流APP定制开发技术,广州APP开发定制服务,APP技术孵化,APP运营推广,手机软件开发公司。

ctBehaviors.each{CtBehaviorctBehavior->if(!ctBehavior.isEmpty()){try{其它优化手段

通过上图可以看出一个大概图片格式选择的方法。如果能用VectorDrawable来表示的话优先使用VectorDrawable,如果支持WebP则优先用WebP,而PNG主要用在展示透明或者简单的图片,而其它场景可以使用JPG格式。针对每种图片格式也有各类的优化手段和优化工具。

目前国内的新闻传播主要有三种模式,一是由媒体自身设计、定制开发App.只是把原先的pc端内容移到移动端中,实现手机应用的转化。可以个性化设置和更多功能的添加,独立App也容易增加成本。二是借用他人的平台来发展自己。这种新闻App寄人篱下,风险比较大。虽然传播有所提高,但缺乏自身的自由。三是设置自己的微信公众号,自媒体运营传播新闻资讯。只要做得好,就能聚拢粉丝,粘性高且成本低。尽管依赖的是微信这个通讯社交App,但比第二种模式自由很多。

然而,无论以哪种方式在做新闻App,都或多或少地出现共同的问题。新闻行业App以及实现了全天候的新闻及时更新,以丰富的资讯,个性化的订阅来取得用户的喜爱。大型的新闻App开发成功案例,如今日头条,腾讯新闻,一点资讯等,消息传播快速,也非常丰富。人们手机里有几个新闻的应用,国内外的时事基本也都掌握。但移动端的新闻大多是照搬电脑端,容易审美疲劳。以手机显示屏看适合电脑的编排,页面挤压的感觉很不好。

针对第一种套路,因各个公司的项目的差异,共性的东西较少,需要casebycase的分析,这里不做过多的介绍。

在GradlePlugin2.2.0及以上版本ProGuard的配置文件会自动解压缩到${rootProject.buildDir}/${AndroidProject.FD_INTERMEDIATES}/proguard-files/目录下,proguardFiles会从这个目录来获取ProGuard配置。

时刻保持良好的编程习惯和对包体积敏锐的嗅觉,去除重复或者不用的代码,慎用第三方库,选用体积小的第三方SDK等等。

ProguardConfiguration是AAPT工具为Manifest中声明的四大组件以及布局文件中(XMLlayouts)使用的各种Views所生成的ProGuard配置,该文件通常存放在${project.buildDir}/${AndroidProject.FD_INTERMEDIATES}/proguard-rules/${flavorName}/${buildType}/aapt_rules.txt,下面是项目中该文件的截图,红框标记出来的就是对AndroidManifest.xml、XMLLayouts中相关Class的ProGuard配置。

appPlugin.variantManager.variantDataList.each{variantData->当然也可以在其它构建步骤中采用更高压缩率的方式来达到瘦身效果,例如采用7Zip压缩等等。

resources.arsc文件最好不要压缩存储,如果压缩会影响一定的性能(尤其是冷启动时间)。

资源的优化图片优化

可以通过开启ProGuard来实现代码压缩,可以在build.gradle文件相应的构建类型中添加minifyEnabledtrue。

减少ENUM的使用(详情可以参考:RemoveEnumerations),每减少一个ENUM可以减少大约1.0到1.4KB的大小;

随着业务的快速迭代增长,最大本地生活服务公司美团App里不断引入新的业务逻辑代码、图片资源和第三方SDK,直接导致APK体积不断增长。包体积增长带来的问题越来越多,如CDN流量费用增加、用户安装成功率降低,甚至可能会影响用户的留存率。APK的瘦身已经是不得不考虑的事情。在尝试瘦身的过程中,美团借鉴了很多业界其他公司提供的方案,同时也针对自身特点,发现了一些新的技巧。本文将对其中的一些做详细介绍。

文件/目录描述lib/ 存放so文件,可能会有armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips,大多数情况下只需要支持armabi与x86的架构即可,如果非必需,可以考虑拿掉x86的部分 res/ 存放编译后的资源文件,例如:drawable、layout等等 assets/ 应用程序的资源,应用程序可以使用AssetManager来检索该资源 META-INF/ 该文件夹一般存放于已经签名的APK中,它包含了APK中所有文件的签名摘要等信息 classes(n).dex classes文件是JavaClass,被DEX编译后可供Dalvik/ART虚拟机所理解的文件格式 resources.arsc 编译后的二进制资源文件 AndroidManifest.xml Android的清单文件,格式为AXML,用于描述应用程序的名称、版本、所需权限、注册的四大组件 当然还会有一些其它的文件,例如上图中的org/、src/、push_version等文件或文件夹。这些资源是JavaResources,感兴趣的可以结合编译工作流中的流程图以及MergeJavaResourcesTransform的源码看看被打入APK包中的资源都有哪些,这里不做过多介绍。

在介绍怎么做之前,先来大概介绍一下App的资源是怎么被打进APK包里的。Android构建工具链使用AAPT工具来对资源进行处理,来看下图(图片来源于BuildWorkflow):

那么,现在新闻手机App软件开发现状如何?

getDefaultProguardFile(‘proguard-android.txt')是从AndroidSDKtools/proguard/文件夹获取默认ProGuard设置。

可以使用矢量图形来创建独立于分辨率的图标和其他可伸缩图片。使用矢量图片能够有效的减少App中图片所占用的大小,矢量图形在Android中表示为VectorDrawable对象。使用VectorDrawable对象,100字节的文件可以生成屏幕大小的清晰图像,但系统渲染每个VectorDrawable对象需要大量的时间,较大的图像需要更长的时间才能出现在屏幕上。因此只有在显示小图像时才考虑使用矢量图形。有关使用VectorDrawable的更多信息,请参阅WorkingwithDrawables。

booleanisPNGWebpConvertSupported(){if(!isWebpConvertEnable()){returnfalse选择更优的压缩工具

通过上图可以看到APK中很多资源是以Stored来存储的,根据Zip的文件格式中对压缩方式的描述Compression_methods可以看出这些文件是没有压缩的,那为什么它们没有被压缩呢?从AAPT的源码中找到以下描述:

我们就是通过这个文件来修改不同后缀文件资源的压缩方式来达到瘦身效果的,而在后面“resources.arsc的优化”一节中也是操作的这个文件。

下面是部分代码片段:

新闻APP开发多少钱,不同的软件开发公司,价格是不一样的,大型的手机APP应用公司开发的,定制的应用程序更专业,技术熟练,他们所需要的价格可能相对较低。但现在,随便自定义一个新闻APP,有几十到几千不等的价格上。总而言之,具体影响到开发一个新闻APP价格的因素,最终还是新闻APP开发功能需求的复杂程度来决定的。

在开始讲瘦身技巧之前,先来讲一下APK的构成。

pngcrush工具特别有效:此工具在PNG过滤器和zlib(Deflate)参数上迭代,使用过滤器和参数的每个组合来压缩图像。然后选择产生最小压缩输出的配置。

通过pmdcpd来检查重复的代码从而进行代码优化;

通过上图可以看到Manifest、Resources、Assets的资源经过AAPT处理后生成R.java、ProguardConfiguration、CompiledResources。其中R.java大家都比较熟悉,这里就不过多介绍了。我们来重点看看ProguardConfiguration、CompiledResources都是做什么的呢?

proguard-rules.pro文件用于添加自定义ProGuard规则。默认情况下,该文件位于模块根目录(build.gradle文件旁)。

android{除了minifyEnabled属性外,还有用于定义ProGuard规则的proguardFiles属性:

请注意,代码压缩会拖慢构建速度,因此应该尽可能避免在调试构建中使用。不过一定要为用于测试的最终APK启用代码压缩,如果不能充分地自定义要保留的代码,可能会引入错误。

每次执行完ProGuard之后,ProGuard都会在${project.buildDir}/outputs/mapping/${flavorDir}/生成以下文件:

classes.dex的优化如何优化classes.dex的大小呢?大体有如下套路:

可以看到APK由以下主要部分组成:

开启ProGuard来进行代码压缩,通过使用ProGuard来对代码进行混淆、优化、压缩等工作。

提示:要想做进一步的代码压缩,可尝试使用位于同一位置的proguard-android-optimize.txt文件。它包括相同的ProGuard规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小APK大小和帮助提高其运行速度。

#p#分页标题#e#CompiledResources是一个Zip格式的文件,这个文件的路径通常为${project.buildDir}/${AndroidProject.FD_INTERMEDIATES}/res/resources-${flavorName}-${buildType}-stripped.ap_。通过下面经过Zip解压后的截图,可以看出这个文件包含了res、AndroidManifest.xml和resources.arsc的文件或文件夹。结合BuildWorkflow中的描述,可以看出这个文件(resources-${flavorName}-${buildType}-stripped.ap_)会被apkbuilder打包到APK包中,它其实就是APK的“资源包”(res、AndroidManifest.xml和resources.arsc)。

2、微信公众账号社交应用也是新闻App可倚靠的一个开发模式。例如微信,随着微信功能的不断开发以及手机用户的增长,现在已经有2.5亿的活跃用户,庞大的市场正在逐渐变得更加庞大。因此,新闻媒体可以通过搭建媒体公众号,实现新闻消息的推送。这个模式的有点便是制作成本是非常低,收效却比较高。缺点便是需要遵循公众号的游戏规则,有可能会降低了作为媒体该有的创新水平。

在充分了解了APK各个组成部分以及它们的作用后,我们针对自身特点进行了分析和优化。下面将从Zip文件格式、classes.dex、资源文件、resources.arsc等方面来介绍下我们发现的部分优化技巧。

1、新闻APP应用的一个开发功能难易度,功能是一个应用开发的核心,一般应用复杂的功能和简单的功能,如存储应用程序功能比较复杂,但简单的企业产品展示的应用程序开发,功能比较简单。还需要看看在服务器上的困难复杂程度的支持。

2、新闻APP应用软件开发的工作范围,如果你已做好设计,并制作好界面素材,准备好数据,并自备帐号自己完成上线申请,仅委托开发就要便宜一些,反之如果委托全新的创意加上功能的策划,费用就会增高不少。

3、手机客户端的新闻APP应用程序的质量要求,一样的新闻APP,质量不同价格肯定也受影响,并且APP还有一个升级的问题,这个升级是有大量工作要做的,是否承担升级和完善的责任也会影响价格。

湖南艾尼科技为湖南卫视开发新闻客户端“辣椒炒肉啵”

如果App的minSdkVersion高于14(Android4.0+)的话,可以选用WebP格式,因为WebP在同画质下体积更小(WebP支持透明度,压缩比比JPEG更高但显示效果却不输于JPEG,官方评测quality参数等于75均衡最佳),可以通过PNG到WebP转换工具来进行转换。当然Android从4.0才开始WebP的原生支持,但是不支持包含透明度,直到Android4.2.1+才支持显示含透明度的WebP,在笔者使用中是判断当前App的minSdkVersion以及图片文件的类型(是否为透明)来选用是否适用WebP。见下面的代码片段:

责编: