java -jar 启动优化_Android 8.1 启动时间优化--耗时分析

之前分析各个部分耗时,都是通过分析log,在SecureCRT中设置时间戳,打印出如下log

[   22.266201] c1 [saudio] saudio_wait_monitor_cmd error -5

[   22.266205] c1 sblock_receive:sblock-5-13 not ready!

[   22.266209] c1 [saudio] Error: sblock_receive dst 5, channel 13 result is -5

[   22.266226] c1 [saudio] saudio_wait_monitor_cmd error -5

[   22.266229] c1 sblock_receive:sblock-5-17 not ready!

[   22.266232] c1 [saudio] Error: sblock_receive dst 5, channel 17 result is -5

[   22.302337] c3 init: Parsing file /system/etc/init/ims_bridged.rc...

[   22.309790] c3 init: Parsing file /system/etc/init/init-debug.rc...

[   22.316932] c3 init: Parsing file /system/etc/init/installd.rc...

---------------------

有效,但数据不全面,不利于分析。百度到了bootchart这个工具,很实用。

1) bootchart工具

在Android O当中,bootchart已经默认集成在Init当中。所以收集数据可以用以下步骤:

只需要你通过开关打开即可生效:“adb shell ‘touch /data/bootchart/enabled’”

重启设备

$ANDROID_BUILD_TOP/system/core/init/grab-bootchart.sh抓取数据生成一张png图片,即可进行分析。

sp8541e_srvm:/data/bootchart $ tar -czf bootchart.tgz enabled header proc_diskstats.log proc_ps.log proc_stat.log

adb pull /data/bootchart/bootchart.tgz .\Desktop\

拷贝bootchart.tgz 到Ubuntu服务器上

Ubuntu服务器上 sudo apt-get install bootchart

bootchart bootchart.tgz

命令结束后就生成对应的png图片。

但是如果碰到bootchart工具不能使用的情况,就需要自己下载bootchart源码:http://www.bootchart.org/download.html,解压后:

1. ant编译

2. java -jar bootchart.jar ../bootchart/bootchart.tgz 生成分析结果图片:

3.

在这里总结下最重要的三步

echo 120 > /data/bootchart/start

tar -czf bootchart.tgz bootchart.tgz enabled header proc_diskstats.log proc_ps.log proc_stat.log

bootchart bootchart.tgz

通过这三步基本上可以获取到开机信息的图片了

从这张启动图片里,我们能够看到:

1. 总共的启动时间是30s,这里指的是从kernel开始启动的时间开始计时,一直到Android 启动结束.

2. Init 进程一直到13s左右才是启动其他进程,如ueventd。

3. Zygote64/Zygote进程大约在22s左右启动。

4. 这样计算下来Android fw的启动时间大致为8s左右。

这样看起来就比较清晰了,Init进程13秒才开始工作的原因是什么?这个时间如果能缩短的话启动时间会效果很显著。

通过dmesg信息,可以看到:

[32m[ 13.227842] [0m[33minit[0m: init second stage started!

[32m[ 13.237508] [0m[33mselinux[0m: SELinux: Loaded file_contexts\x0a

[32m[ 13.243342] [0m[33mselinux[0m: SELinux: Loaded property_contexts from /plat_property_contexts & /nonplat_property_contexts.\x0a

[32m[ 13.254522] [0m[33minit[0m: Running restorecon…

[32m[ 13.593214] [0m[33mselinux[0m[31m: SELinux: Could not stat /dev/block: No such file or directory.\x0a[0m

[32m[ 13.601607] [0m[33minit[0m[31m: waitpid failed: No child processes[0m

[32m[ 13.606477] [0m[33minit[0m: Couldn’t load properties from /system/etc/prop.default: No such file or directory

[32m[ 13.615416] [0m[33minit[0m: Couldn’t load properties from /prop.default: No such file or directory

[32m[ 13.623768] [0m[33minit[0m: Couldn’t load properties from /odm/default.prop: No such file or directory

[32m[ 13.631946] [0m[33minit[0m: Couldn’t load properties from /vendor/default.prop: No such file or directory

[32m[ 13.641126] [0m[33minit[0m: Created socket ‘/dev/socket/property_service’, mode 666, user 0, group 0

[32m[ 13.648925] [0m[33minit[0m: Parsing file /init.rc…

[32m[ 13.653220] [0m[33minit[0m: Added ‘/init.environ.rc’ to import list

[32m[ 13.658291] [0m[33minit[0m: Added ‘/init.usb.rc’ to import list

[32m[ 13.663329] [0m[33minit[0m: Added ‘/init.angler.rc’ to import list

[32m[ 13.668660] [0m[33minit[0m: Added ‘/vendor/etc/init/hw/init.angler.rc’ to import list

[32m[ 13.675611] [0m[33minit[0m: Added ‘/init.usb.configfs.rc’ to import list

[32m[ 13.681379] [0m[33minit[0m: Added ‘/init.zygote64_32.rc’ to import list

[32m[ 13.688215] [0m[33minit[0m: Parsing file /init.environ.rc…

[32m[ 13.692099] [0m[33minit[0m: Parsing file /init.usb.rc…

[32m[ 13.696775] [0m[33minit[0m: Parsing file /init.angler.rc…

[32m[ 13.701323] [0m[33minit[0m: Added ‘init.angler.usb.rc’ to import list

[32m[ 13.706678] [0m[33minit[0m: Added ‘init.angler.diag.rc’ to import list

[32m[ 13.712305] [0m[33minit[0m: Added ‘init.angler.sensorhub.rc’ to import list

[32m[ 13.719668] [0m[33minit[0m: Parsing file init.angler.usb.rc…

[32m[ 13.724264] [0m[33minit[0m: Parsing file init.angler.diag.rc…

确实是13s左右init进程才开始工作。所以第一步我们来想办法把这个时间看看能不能缩短。

通过这个工具,我们能够大致清楚了从系统启动到Android启动完成后的主要时间,同时也能够简单的分析出kernel启动时间,zygote启动时间,sysetmserver启动时间,但是这个工具还是不能把Android 启动阶段毕竟清晰的展现出来,这个时候就需要使用到第二个工具了。

2) boot mesg

我们很高兴的可以看到在Android中已经加入了一系列的mesg,我们可以通过这一系列的mesg可以抓出android fw启动的相关时间。

到此为止,我们大致能够得出android 启动的每个阶段所耗费的时间了,后续我们来仔细分析每个阶段的代码,看看都干了啥。

第一步,关闭kernel log输出:

65 int console_printk[4] = {

66         0,//DEFAULT_CONSOLE_LOGLEVEL,   /* console_loglevel */

67         0,//DEFAULT_MESSAGE_LOGLEVEL,   /* default_message_loglevel */

68         0,//MINIMUM_CONSOLE_LOGLEVEL,   /* minimum_console_loglevel */

69         0,//DEFAULT_CONSOLE_LOGLEVEL,   /* default_console_loglevel */

70 };

简单粗暴,全部关闭掉,重新编译boot.img测试下,快了将近10s.。。。

通过查看dmesg:

[32m[    5.276684] [0m[33minit[0m: Parsing file /init.rc...

[32m[    5.276945] [0m[33minit[0m: Added '/init.environ.rc' to import list

[32m[    5.276959] [0m[33minit[0m: Added '/init.usb.rc' to import list

[32m[    5.276978] [0m[33minit[0m: Added '/init.angler.rc' to import list

[32m[    5.276997] [0m[33minit[0m: Added '/vendor/etc/init/hw/init.angler.rc' to import list

[32m[    5.277010] [0m[33minit[0m: Added '/init.usb.configfs.rc' to import list

[32m[    5.277026] [0m[33minit[0m: Added '/init.zygote64_32.rc' to import list

[32m[    5.278233] [0m[33minit[0m: Parsing file /init.environ.rc...

[32m[    5.278331] [0m[33minit[0m: Parsing file /init.usb.rc...

[32m[    5.278675] [0m[33minit[0m: Parsing file /init.angler.rc...

[32m[    5.278851] [0m[33minit[0m: Added 'init.angler.usb.rc' to import list

[32m[    5.278865] [0m[33minit[0m: Added 'init.angler.diag.rc' to import list

[32m[    5.278878] [0m[33minit[0m: Added 'init.angler.sensorhub.rc' to import list

[32m[    5.280094] [0m[33minit[0m: Parsing file init.angler.usb.rc...

[32m[    5.280726] [0m[33minit[0m: Parsing file init.angler.diag.rc...

[32m[    5.280817] [0m[33minit[0m: Parsing file init.angler.sensorhub.rc...

[32m[    5.280908] [0m[33minit[0m: Parsing file /vendor/etc/init/hw/init.angler.rc...

[32m[    5.280934] [0m[33minit[0m[31m: could not import file '/vendor/etc/init/hw/init.angler.rc' from '/init.rc': No such file or directory[0m

[32m[    5.280951] [0m[33minit[0m: Parsing file /init.usb.configfs.rc...

[32m[    5.281447] [0m[33minit[0m: Parsing file /init.zygote64_32.rc...

[32m[    5.281581] [0m[33minit[0m: Parsing file /system/etc/init...

[32m[    5.281607] [0m[33minit[0m: Parsing file /vendor/etc/init...

[32m[    5.281632] [0m[33minit[0m: Parsing file /odm/etc/init...

[32m[    5.281702] [0m[33minit[0m: processing action (early-init)

[32m[    5.282227] [0m[33minit[0m: starting service 'ueventd'...

[32m[    5.282722] [0m[33minit[0m[31m: failed to open /acct/uid_0/pid_330/cgroup.procs: No such file or directory[0m

[32m[    5.282756] [0m[33minit[0m[31m: createProcessGroup(0, 330) failed for service 'ueventd': No such file or directory[0m

[32m[    5.282980] [0m[33minit[0m: processing action (wait_for_coldboot_done)

[32m[    5.283890] [0m[31mmsm_rng:Data not available![0m

[32m[    5.284876] [0m[33mueventd[0m: ueventd started!

发现Init进程确实提前到kernel启动5s左右。。

参考:

https://blog.youkuaiyun.com/ljp1205/article/details/78360701

https://blog.youkuaiyun.com/qqxiaoqiang1573/article/details/56839031

jadx vs dex2jar+jd-gui:安卓反编译工具对比与实战体验 本文深度对比了安卓反编译工具jadx与dex2jar+jd-gui组合的优缺点,从核心功能、实战性能到高级应用场景进行全面分析。jadx以其一体化设计和实时反编译优势适合快速分析,而dex2jar+jd-gui则在处理大型apk时表现更稳定。文章还提供了性能优化方案和工具选择策略,帮助开发者根据项目需求选择最佳反编译方案。 阅读详情

相关推荐

Android MultiDex技术解析与性能优化实践

MultiDex是Android开发中解决64K方法数限制的核心技术,其原理是通过构建时拆分DEX文件、运行时动态加载实现。在Dalvik虚拟机架构下,单个DEX文件的方法引用上限为65536个,MultiDex技术通过分包机制突破这一限制。该技术涉及构建系统集成、类加载机制改造等关键技术点,对应用启动性能有显著影响。在工程实践中,开发者需要关注主DEX列表优化、异步加载策略等关键环节,结合ProGuard代码混淆与D8编译器优化,可有效降低40%以上的冷启动耗时。目前该技术已深度集成到Android Gr

weixin_33713503的博客 378

jvm调优

jvm调优

jjj_fl的博客 851

UE5安卓打包全流程:从环境配置到APK生成与真机调试

在移动应用开发中,将高性能的3D项目部署到安卓平台是一项关键且复杂的技术挑战,其核心在于构建工具链的协同与配置。这一过程涉及Android SDK、NDK、JDK等基础组件的版本对齐与环境变量配置,其原理是通过Gradle构建系统将Unreal Engine项目资源与代码编译、链接并打包为可执行的APK文件。正确的配置不仅能确保打包成功,更能优化应用性能与兼容性。对于使用UE5进行移动开发的团队而言,掌握从环境搭建、项目设置到命令行打包、日志分析的完整流程,是提升开发效率、减少部署障碍的重要工程实践。本文聚

weixin_30719711的博客 1833

JVM-JVM核心调优参数、线上排查命令与实战性能优化全教程

文章目录1:JVM参数1 标准参数2 -X参数3 -XX参数4 其他参数5 查看参数6 设置参数的常见方式7 实践和单位换算8 常用参数含义2:常用命令1 jps2 jinfo3 jstat4 jstack5 jmap6 性能优化3:jvm优化图 1:JVM参数 1 标准参数 -version -help -server -cp [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E3AIgsfB-1653197252016)(images/37.png)] 2 -X参数 非标

苍煜 3627

RK3588安卓开机自启动:从广播到init.rc的嵌入式实战方案

在嵌入式系统开发中,开机自启动是实现设备专用化与无人值守运行的核心机制。其原理在于系统初始化后自动加载指定应用或服务,确保关键业务逻辑的持续执行。这一技术对于智能终端、工业控制等场景具有重要价值,能显著提升设备的可靠性与用户体验。在RK3588这类高性能AIoT平台上,实现稳定自启动常需权衡系统权限与启动时机。常见方案包括利用标准安卓广播、将应用预置为系统应用,或通过底层init.rc脚本直接启动。其中,涉及SELinux策略配置与系统签名等关键环节,是保障方案稳定性的基础。本文聚焦RK3588平台,深入探

anheku1562的博客 462

Unity2019安卓打包环境配置全攻略:从SDK、JDK到Gradle避坑指南

在移动应用开发中,构建环境的正确配置是项目成功打包部署的基础。其核心原理在于协调SDK、JDK、NDK和Gradle等工具链的版本与路径,确保各组件能协同工作。稳定的构建环境对于提升开发效率、保障团队协作至关重要,尤其在游戏开发、企业级应用打包等场景中。本文聚焦于Unity2019这一特定版本,针对其安卓打包过程中常见的“Gradle构建失败”、“JDK版本不兼容”等典型问题,提供了从组件选型、分步配置到高频错误排查的完整工程实践方案,旨在帮助开发者搭建一个可靠、可复现的安卓构建流水线。

weixin_30791095的博客 402

jar包启动脚本资源优化设置 堆栈 内存

【代码】jar包启动脚本资源优化设置 堆栈 内存。

weixin_42161659的博客 585

使用JADX-GUI逆向分析Android SDK:从黑盒集成到主动审查

在Android开发中,第三方SDK的集成常面临安全与性能的“黑盒”挑战。通过逆向工程技术,开发者可以深入理解SDK的内部机制,从被动集成转变为主动审查。JADX-GUI作为一款图形化反编译工具,能够将APK中的DEX字节码还原为可读的Java源代码,极大降低了逆向分析的门槛。其核心价值在于帮助开发者排查崩溃、审查权限、追踪网络行为及评估安全风险,尤其适用于分析启动耗时、敏感数据收集等具体问题。本文以广告SDK启动优化为例,展示了如何通过代码流分析与网络请求追踪定位性能瓶颈,为工程实践中的SDK选型与问题排

319

Java启动参数、调优及分析

java启动参数共分为三类;其一是(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;一、标准参数参数描述-client设置jvm使用client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者PC应用开发和调试-server。

AlbenXie的博客 2384

java程序启动参数设置优化

不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 857

Java JAR 启动内存参数配置指南:从基础设置到性能优化

在启动 Java 可执行 JAR 文件时,合理配置 JVM 内存参数是保障应用稳定性和性能的关键。本文将系统讲解如何通过命令行参数、环境变量等方式指定内存配置,并结合实际场景提供优化建议。

chuntiandejiewei的博客 1984

从Verilog到GDS:手把手教你搞定Calibre LVS物理验证(附常见报错解决)

本文详细介绍了从Verilog到GDS的Calibre LVS物理验证全流程,包括工具链配置、RTL到SPICE网表转换、LVS运行配置及高级技巧。重点解析了常见报错如网络不匹配、器件不匹配和电源引脚缺失的解决方案,帮助工程师高效完成芯片物理验证,确保设计正确性。

culing2941的博客 506

布隆过滤器优化Java应用JAR加载性能实践

布隆过滤器是一种高效的概率型数据结构,通过多哈希函数映射实现快速元素存在性检测。在Java应用启动过程中,随着依赖JAR包数量激增,传统线性扫描方式面临性能瓶颈。利用布隆过滤器O(k)的时间复杂度特性,可以显著加速类加载过程,特别适合Spring Boot、TongWeb等大型项目。该技术通过位数组压缩存储空间,结合MurmurHash等算法,将JAR加载耗时降低50%以上。典型应用场景包括Maven项目构建、Docker容器部署等,能有效解决JAR膨胀导致的启动缓慢问题。本文以TongWeb8.0为例,展

weixin_34392435的博客 358

R_柱状图(加误差线,显著性差异)

先放最终效果图 结果图 # bar_plot 2021/01/19 # 导入所需的包 library(ggplot2) library(ggthemr) library(ggsignif) library(tidyverse) library(dplyr) library(ggpubr) library(devEMF) # 导入并处理数据,需要两张表,一个是原始汇总表格,另外一些是每一...

wt141643的博客 2万+

ABAP CURR Data Type 深度解析与实战案例

CURR 数据类型是 SAP ABAP 中为处理货币金额而设计的一种特殊数据类型。CURR 数据类型能够自动根据关联的货币代码字段(例如 WAERS)确定小数位数,从而保证金额数据的精度与正确性。CURR 类型通常在 SAP 数据字典中使用,常见于各类业务数据表中,如会计凭证、销售订单等场景中,用于存储货币金额。CURR 数据类型底层实现上类似于 DEC 数据类型,但其特别之处在于与货币代码字段的绑定,这使得金额的格式化和显示可以自动匹配相应的货币规则。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 876

Android O 启动优化--

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljp1205/article/details/78360701 Android O 启动优化的一些思路 启动优化其实是一个比较大的命题,在一些特地的场景下,快速启动有...

Linux and C 485

YOLO26改进策略【Neck】| 关键点检测:SDFM 表层细节融合模块,利用通道-空间注意力机制,实现深层与浅层特征融合,抑制噪声干扰

本文记录的是利用SDFM 模块改进 YOLO26 的颈部融合部分,专门用于关键点检测。SDFM模块(Surface Detail Fusion Module,表层细节融合模块) 通过在特征提取网络的浅层引入通道-空间注意力机制,动态生成深层与浅层特征融合权重。该模块可自适应保留不同模态中的独特信息,抑制背景噪声与光照干扰,实现低层细节的精准对齐与互补增强,为后续检测提供高保真度的底层特征表示,从而提升模型在复杂场景下的目标检测鲁棒性与定位准确性。Rethinking the necessity of ima

Limiiiing的博客 175

Android开发技术周报:工具更新与性能优化实践

Android开发作为移动端核心技术领域,其工具链和框架的持续演进直接影响开发效率和应用质量。从技术原理看,Android Studio作为官方IDE通过实时镜像、数据库检查器等工具提升开发体验,而ADB Shell则提供了底层设备管理能力。在工程实践层面,MVVM架构的现代实现采用StateFlow和协程优化数据流管理,性能优化则聚焦启动耗时和内存泄漏等关键指标。这些技术在电商、社交等高频交互场景中尤为重要,比如通过Flutter实现跨平台UI一致性,或使用ML Kit集成智能识别功能。本期周报特别关注A

weixin_34268169的博客 434

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1696

【YOLOv11工业级实战】27. TensorRT量化实战:FP16/INT8极致加速!边缘设备YOLOv11推理速度提升4倍,精度损失控制在1.5%内

摘要:本文针对智慧园区200路摄像头实时分析的工业痛点——RTX 3080单卡仅能处理12路视频流(YOLOv11-nano FP32精度45FPS,需≥120FPS且精度损失≤3%),提供TensorRT量化完整解决方案。从原理解析(FP16/INT8精度差异与量化逻辑)到实操落地(ONNX转换、FP16引擎构建、INT8精细校准),全程给出可复用代码。实测显示:FP16量化后速度达128FPS(×2.8),精度损失0.2%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1715

ELF 1开发板Java环境移植与优化实践

在嵌入式Linux开发中,Java运行环境的移植与优化是关键技术挑战。通过JVM原理分析,针对ARMv7架构的Cortex-A7处理器,需要特别关注内存管理、垃圾回收机制和NEON指令加速。OpenJDK作为开源实现,配合JamVM等精简方案,可在资源受限设备上实现50MB以内的内存占用。典型应用场景包括工业控制、物联网边缘计算等嵌入式领域。本文以ELF 1开发板为例,详细解析交叉编译工具链配置、JVM参数调优等工程实践,其中NEON指令集优化可提升浮点运算性能30%以上,而Serial GC的选择则有效避

weixin_34416649的博客 407

怎样让你的论文看起来“像人写的”?只用三招直接去除AI味(附提示词)

当然如果你在实际使用中还有其他需求,比如降重润色、改写翻译等,也可以结合七哥的专业写作平台来辅助,这个高级学术平台已经内置了ChatGPT4o、ChatGPT4.1、Claude3.7、满血版DeepSeek-R1等AI大模型,帮你写文献综述、干课题申报、写论文等学术任务绝对每一点问题。比如我自己的一套学术写作平台,其中的“降重与润色”模块整合了多种GPTs应用,除了能帮助调整语言风格、避免雷同表达,还可以顺带降个重,对于提升学术文本的整体质量还是非常有用的。一、为什么用AI写出来的文章会有AI味?

智能AI让学术科研更容易 1680

安卓启动流程与期间核心组件工作原理

本文以实际工作中出现的启动相关各种千奇百怪的bug为钩子,讲解了安卓app冷启动过程中核心组件的工作原理,pms -> packageParser/androidmanifest.xml -> context -> ams -> application -> activity -> layoutInflater资源加载过程 -> wms /window/WM -> view与viewgroup绘制原理 -> 渲染阶段。理供解决问题的思路,看业务框架代码能看懂他们改的哪块源码,跟他们扯皮能扯赢

mix39的博客 337

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓第一次启机时间很长的原因

在做Android内核开发的过程中,我们会发现,每次编译完系统源码,烧录到设备/手机中后,第一次启动都会很慢很慢,要好几分钟甚至十几分钟,为什么会出现这样的现象呢?系统刷机后第一次启动与后面再次启动有什么不同呢? 要解答这个问题,首先我们需要了解一下AndroidDalvik虚拟机,以及Dalvik-cache。由于嵌入式设备内存有限、CPU处理器不够强大、功耗敏感等原因,Google没有使用标准

靑い空゛ 1176

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android脱糖

`Android 5`、`Adnroid 6`系统原生只支持到`Java 7`,`Android 7`原生仅支持部分`Java 8`特性(比如Lambda表达式),到了`Android 8`则完整支持`Java 8`了。我们写Android项目时,对于兼容性,一般来说指定`minSdk`就可以了,比如`minSdk`设置为21,对应为`Android 5`,也就是说这个项目需要兼容的最低版本是`Android 5`,假设我们把`targetCompatibility`和`jvmTarget`设置为11,那生

Android菜鸟的专栏 2202

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: java ip 获取了两个_用Java获取本地的多个IP地址
下一篇: java复制类mytool_MyTools
少年梁大锤
博客等级 码龄6年 28粉丝 1415原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值