-
2019-06-15 23:26:12
Android P相对Android O 的优化
1、系统 UI 更新
2、异形屏和双摄像头官方API
3、ART性能提升
4、省电优化,限制传感器的使用
5、一些小操作的优化
6、使用 WiFi RTT 进行室内定位;全新的 MessagingStyle 消息通知;HDR VP9 视频、HEIF 以及媒体 APIs ;JobScheduler 中的数据费用敏感度;神经网络 API 1.1;自动填充的改进;用于 NFC 支付和安全交易的 Open Mobile API;具体的更新内容可以参考谷歌开发者的官方更新内容文章。Android P Pistachio Ice Cream,开心果冰淇淋 是谷歌首个开发者预览版,对“刘海屏”设备进行了适配,使用WiFi RTT实现室内精确定位,消息通知栏的改进,多摄像头API以及神经网络API 1.1版本等升级。
首个Android P预览版亮点很多,第一个改变就 很“接地气”,那就是适配类似iPhone X的顶部凹槽屏幕设计,为“刘海屏”设备进行了适配。在开发者模式中,原生系统已经可以模拟“刘海屏”的凹口并对拥有通知栏进行了适配和优化(时间移动到了左边),系统中的名称翻译过来可以把“刘海屏”称之为“凹口屏”。
安卓O的聚焦重点是电池续航能力、速度和安全,让用户更好地控制各种应用程序,加大了对App在后台操作的限制。这种限制在一定程度上延长了安卓机在“睡眠”(Doze)模式下的电池的续航能力,它让不在使用的App进入睡眠状态,使用时再唤醒。它要达到的目标是在不卸载程序、不改变用户使用习惯的情况下,减少后台应用的用电。同时,这种对后台应用的限制也会加快运行的速度。更多相关内容 -
报错:MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O
2021-10-29 09:07:20MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26) Stack trace: ...当把 minSdkVersion 设置为小于 26 时,build报出如下错误:
MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26) Stack trace: com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26) at com.android.tools.r8.errors.a.a(:7) at com.android.tools.r8.ir.conversion.O.b(:58) at com.android.tools.r8.ir.conversion.O.a(:104) at com.android.tools.r8.ir.conversion.O.a(:53) at com.android.tools.r8.graph.C.b(:40) at com.android.tools.r8.ir.conversion.O.b(:35) at com.android.tools.r8.utils.U0.a(:10) at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125) at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69) at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78) at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:322) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:66) at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:36) at com.android.tools.r8.utils.U0.a(:3) at com.android.tools.r8.ir.conversion.O.a(:10) at com.android.tools.r8.D8.d(:29) at com.android.tools.r8.D8.b(:1) at com.android.tools.r8.utils.W.a(:30) at com.android.tools.r8.D8.run(:11) at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:116) at com.android.build.gradle.internal.dexing.DexWorkActionKt.process(DexWorkAction.kt:194) at com.android.build.gradle.internal.dexing.DexWorkActionKt.processNonIncrementally(DexWorkAction.kt:164) at com.android.build.gradle.internal.dexing.DexWorkActionKt.launchProcessing(DexWorkAction.kt:91) at com.android.build.gradle.internal.dexing.DexWorkAction.run(DexWorkAction.kt:49) at org.gradle.workers.internal.AdapterWorkAction.execute(AdapterWorkAction.java:50) at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:50) at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:63) at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:59) at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:98) at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:59) at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406) at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36) at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41) at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:53) at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:200) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:215) at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.lang.Thread.run(Thread.java:748) Suppressed: java.util.concurrent.ExecutionException: com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26) at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:552) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:513) at com.google.common.util.concurrent.FluentFuture$TrustedFuture.get(FluentFuture.java:86) at com.android.tools.r8.utils.U0.a(:14) at com.android.tools.r8.utils.U0.a(:9) ... 40 more [CIRCULAR REFERENCE:com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)] Caused by: com.android.tools.r8.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26) at com.android.tools.r8.ir.conversion.N.a(:633) at com.android.tools.r8.ir.conversion.N.a(:674) at com.android.tools.r8.r.n.A.a(:236) at com.android.tools.r8.ir.conversion.o.a(:153) at com.android.tools.r8.ir.conversion.N.a(:133) at com.android.tools.r8.graph.l.a(:93) at com.android.tools.r8.graph.l.a(:71) at com.android.tools.r8.graph.l.buildIR(:1) at com.android.tools.r8.graph.C0.buildIR(:1) at com.android.tools.r8.graph.T.a(:152) at com.android.tools.r8.ir.conversion.O.a(:412) at com.android.tools.r8.ir.conversion.O.b(:53) ... 53 more
原因:在app模块的build.gradle中忘了为什么添加了如下的依赖
dependencies { ... implementation files ('C:\\Program Files\\Java\\jdk1.8.0_251/jre/lib/rt.jar') ... }
解决方法:将这一条依赖去掉就好。
-
Android 实现应用更新适配 Android O (Android 8.0)
2018-03-25 17:24:37之前写过一篇 Android 实现应用更新(适配Anndroid N),本篇主要讲解Android O(Android 8.0)上应用更新的适配问题,应用更新的完整实现请结合上一篇文章一起,文末也会给出完整代码链接。 最近测试反馈在Android ...之前写过一篇 Android 实现应用更新(适配Anndroid N),本篇主要讲解Android O(Android 8.0)上应用更新的适配问题,应用更新的完整实现请结合上一篇文章一起,文末也会给出完整代码链接。
最近测试反馈在Android 8.0的手机上,提示应用更新,更新时会出现下载失败,并且通知栏也没有显示下载的进度的情况,即使下载成功也不会弹出应用安装界面。
实测发现确实是有这样的问题。当targetSdkVersion小于26时,没有问题,当targetSDK等于26时,就会出现上述问题。
上述问题实际上是三个问题:
(1)APK文件下载失败
(2)通知栏不显示
(3)下载成功没有跳出应用安装界面于是马上想到了应该是Android O(Android 8.0)的新特性导致的。
-APK文件下载失败
通过查看日志信息,是因为在本地SD卡创建下载文件失败。
而创建下载文件失败,日志信息竟然是没有权限,怎么可能,明明点击更新时,动态申请了“读写”权限,这里“读写”权限打双引号,是因为代码中申请的其实是READ_EXTERNAL_STORAGE读存储权限,这在Android O(Android 8.0)之前是没有任何问题的,因为读写是一组权限,同属存储权限,只要申请了同组权限中的一个,同组中的其他在清单文件中列出了的权限也就被授予了。但是Android O(Android 8.0)运行时权限有了变动,就是系统只会授予应用明确请求的权限,
然而一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准,但是还是需要去申请,这点和Android O(Android 8.0)之前不同。由于这里创建下载文件,实际上是往存储中写文件,需要写存储权限WRITE_EXTERNAL_STORAGE,于是将代码点击更新时申请READ_EXTERNAL_STORAGE改为申请WRITE_EXTERNAL_STORAGE。运行测试,APK文件是可以下载成功了。第一个问题得到解决。
-通知栏不显示问题
在Android O(Android 8.0)之前的手机上,更新下载APK文件时,通知栏会显示下载进度的通知,然而Android O(Android 8.0)的手机上,targetSDK等于26时,下载文件并没有通知栏显示。查看官网Android O行为变更,发现通知的创建与显示发生了变化,创建通知之前还需要创建一个NotificationChannel。按照官网的示例对通知的显示做了兼容性处理:(完整代码,文末会给出链接)
private void notifyUser(int progress) { if (Build.VERSION.SDK_INT >= 26) { if (mNotificationChannel == null) { //创建 通知通道 channelid和channelname是必须的(自己命名就好) mNotificationChannel = new NotificationChannel("1", "Channel1",NotificationManager.IMPORTANCE_HIGH); mNotificationChannel.enableLights(true);//是否在桌面icon右上角展示小红点 mNotificationChannel.setLightColor(Color.GREEN);//小红点颜色 mNotificationChannel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知 mNotificationManager.createNotificationChannel(mNotificationChannel); } int notificationId = 0x1234; Notification.Builder builder = new Notification.Builder(getApplicationContext(), "1"); builder.setOnlyAlertOnce(true); builder.setSmallIcon(R.mipmap.ic_launcher) .setContentText("正在下载新版本,请稍后...") .setAutoCancel(true); if (progress > 0 && progress <= 100) { builder.setProgress(100, progress, false); } else { builder.setProgress(0, 0, false); } builder.setContentIntent(progress >= 100 ? this.getContentIntent() : PendingIntent.getActivity(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT)); Notification notification = builder.build(); mNotificationManager.notify(notificationId, notification); } else { NotificationCompat.Builder builder = new NotificationCompat.Builder(this,null); builder.setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setContentTitle(getString(R.string.app_name)); if (progress > 0 && progress <= 100) { builder.setProgress(100, progress, false); } else { builder.setProgress(0, 0, false); } builder.setAutoCancel(true); builder.setWhen(System.currentTimeMillis()); builder.setContentIntent(progress >= 100 ? this.getContentIntent() : PendingIntent.getActivity(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT)); mNotification = builder.build(); mNotificationManager.notify(0, mNotification); } }
这里要特别声明一点的是 builder.setOnlyAlertOnce(true);这句代码,
因为在测试的时候发现,通知更新进度的时候,手机会一直有提示音,加上这句代码后就不会一直有提示音了。然后测试发现下载APK文件时,通知栏就会正常显示通知显示APK下载进度了。
第二个问题也得到了解决。-APK文件下载成功没有正常跳到应用安装界面。
Android O (Android 8.0) 中,Google 移除掉了容易被滥用的“允许未知来源”应用的开关,在安装 Play Store 之外的第三方来源的 Android 应用的时候,竟然没有了“允许未知来源”的检查框,如果你还是想要安装某个被自己所信任的开发者的 app,则需要在每一次都手动授予“安装未知应用”的许可。
首先在AndroidManifest.xml 清单文件中添加安装未知来源应用的权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
然后在用户点击更新时判断是否开启了该应用的“允许安装未知来源”的权限,没有的话,就引导用户去开启该应用的“允许安装未知来源”的权限,判断代码如下:(完整代码,文末会给出链接)
private void downloadAPK(){ boolean hasInstallPerssion = getPackageManager().canRequestPackageInstalls(); if (hasInstallPerssion ) { //安装应用的逻辑 } else { //跳转至“安装未知应用”权限界面,引导用户开启权限,可以在onActivityResult中接收权限的开启结果 Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); startActivityForResult(intent, REQUEST_CODE_UNKNOWN_APP); } } //接收“安装未知应用”权限的开启结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_UNKNOWN_APP) { downloadAPK(); } }
这样点击更新时引导用户开启“允许安装未知来源”的权限后,APK文件下载成功后也
成功的跳转到应用安装界面。第三个问题也得到了解决。至此应用更新在Android O(Android 8.0)上的问题就都得到了解决,成功的适配了Android O。
应用更新的完整实现请结合上一篇 Android 实现应用更新(适配Anndroid N)
应用跟新的完整代码地址:
https://github.com/maqing-programmer/AppUpdateDemo -
Invoke-customs are only supported starting with Android O (--min-api 26)
2022-01-16 20:51:32Invoke-customs are only supported starting with Android O (–min-api 26) 解决方法: 在Build.gradle(Module: app)内android节点添加如下闭包: compileOptions { sourceCompatibility JavaVersion.VERSION_1_8...Android Studio报错:
Invoke-customs are only supported starting with Android O (–min-api 26)解决方法:
在Build.gradle(Module: app)内android节点添加如下闭包:compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
如图所示:
-
Android开发——AS编译失败,Invoke-customs are only supported starting with Android O
2020-08-23 03:19:35om.android.tools.r8.a: Invoke-customs are only supported starting with Android O (--min-api 26) at com.android.tools.r8.dex.r.a(:291) at com.android.tools.r8.dex.r.a(:98) at ... -
[Android O] Camera 服务启动流程简析
2018-07-27 17:05:39前言 去年正式进入框架组的时候,啥也不会,瞎jb分析了一通 Android N 上面的 Camera 相关流程。...从正式进入项目到现在大概有 10 个月了吧,其中大概有一半时间在 Android N 上填坑,另一半就是填 Android... -
AndroidO(8.0) 和 Android P(9.0)
2018-05-30 09:47:14大早上躺床上就索性百度了下p和o 发现百度百科的说明还是很简洁易懂的2017年8月22日,谷歌正式发布了Android8.0的正式版,其正式名称为:Android Oreo(奥利奥) 。奥利奥版安卓的聚焦重点是电池续航能力、速度和... -
Android HIDL理解(基于Android O)
2019-01-22 19:21:42Android HIDL理解(基于Android O) 1 概述 HIDL是Hardware Interface Definition Language的简称。在Android Project Treble被提出,在android O中被全面的推送。 2 HIDL 2.1 hidl设计目的 设计 ... -
Android O (28)---8.0 新特性介绍
2018-05-22 17:58:04Android O (8.0) 新特性介绍Android O 功能和 API(文章内容均来Google开发者官网,有需要可自行翻墙查看更多资料)Android O 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。请务必查阅 Android O... -
漫谈android系统(9)-androidO的Android Treble 计划与大的变动
2017-09-30 22:10:56Android O的大变更Android O这次来了一个大手笔,谷歌的人第一次到下游厂商进行宣导,并指出了并开始向各家厂商灌输谷歌的新理念:彻底解决Android版本碎片化的问题我有幸参加了这次宣讲,虽然由于临近国庆没有拿到... -
Android O (8.0) 新特性介绍
2017-06-15 16:35:45Android O 功能和 API(文章内容均来Google开发者官网,有需要可自行翻墙查看更多资料)Android O 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。请务必查阅 Android O 行为变更以了解平台变更... -
AndroidO 下图形显示框架变化介绍
2018-05-07 10:07:53也在不断变化修改,但主体框架未变,依然保持Android4.0上定制的实现结构,只是类命名更加清晰,实现方式更加明了,同时随着HAL版本的不断升级,增加了一些额外的接口,随着AndroidO引入Treble架构,显示框架也作了... -
Android Studio编译失败: Android O (–min-api 26)在增加compileOptions后依旧报错
2020-08-29 11:41:17AS报错:MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (–min-api 26) AS报错:Default interface methods are only supported starting with Android N (–min-... -
system和vendor分区挂载解析(Android O)
2018-08-22 16:11:58首先我们知道init进程在运行时会调用自身,所以init进程分为stage1和stage2两个阶段,而分区挂载操作也分为两个...在Android O之后的版本中,我们知道很多ko被从kernel中提取出来,移动到system分区和vendor分区中... -
Android wifi打开流程(Android O)
2018-03-15 19:44:16根据自己的理解整理了Android O的wifi启动流程,为便于理解,绘制了Android O wifi架构图。有理解不到之处和错误之处,请各位指出,一起学习。 一. Android O wifi 架构: 由于Andro... -
Invoke-customs are only supported starting with Android O (--min-api 26)问题解决办法
2020-04-08 20:25:05在APP设置中添加了AndroidX的PreferenceFragment支持,结果Make Project出现此错误。 出现此问题是因为项目未设置Java8的支持,有两种解决方案。 第一种: 在项目的build.gradle文件的android{}节点下,增加如下... -
AndroidO Treble架构分析
2018-04-06 19:40:49从AndroidO开始,google引入了Treble架构,目的是为了方便系统升级,将oem定制的东西和Framework分离。AndroidO之前的版本:在此之前的Android系统架构当中,Android Framework与Android HAL是打包成一个system.img... -
Android O u-blox gps移植
2018-10-23 18:00:4811 @@ PRODUCT_PACKAGES += \ wifilogd \ wificond +#GPS GNSS HAL +PRODUCT_PACKAGES += \ + android.hardware.gnss@1.0-impl \ + android.hardware.gnss@1.0-service + # Qcom WiFi Firmware PRODUCT_COPY_FILES ... -
Android O 在源码中打包具有系统API功能的jar包
2018-07-31 12:40:41我在Android O的项目上开发应用程序时, 需要用到系统的一些功能, 想在源码中打包出一个功能丰富的jar包, 然后在IDE中使用, 比如Eclipse中使用, 这中间碰到了很多问题. 使用BUILD_JAVA_LIBRARY... -
Android 报错:AGPBI:MethodHandle.invoke are only supported starting whit android O mini api 26
2019-12-26 16:18:25Android 报错:AGPBI:MethodHandle.invoke are only supported starting whit android O mini api 26错误解决方案搜索到的解决方案(无法解决)最终解决方案完事 错误 错误描述文本: FAILURE: Build failed with... -
Android O/Android P行为变更及适配
2018-08-08 09:36:34Android O行为变更: 后台服务运行的限制: 当应用进入后台状态几分钟后,android系统就会将app视为空闲状态并停止该app的后台服务。所以不能依赖后台service做定时性的任务。 前台服务启动的限制: 在 Android... -
突破Android O 系统对Service的限制
2019-11-18 23:30:43接着上一篇《android O 对Service的限制【Background Execution Limits】》内容。 我们将解决下面两个问题,并提出一个有趣的问题。 app处在空闲期(idle)时,如何启动Service? 在App进入空闲期(idle)时,如何让... -
Android Studio编译失败:Error: Invoke-customs are only supported starting with Android O (--min-api ...
2018-11-01 13:59:16Error: Invoke-customs are only supported starting with Android O (--min-api 26) 解决方案: build.gradle文件中android节点下增加: compileOptions { sourceCompatibility JavaVersion.VER... -
Android O 指纹识别解析
2017-12-07 15:50:16一、前言 - Project Treble众所周知,Android 碎片化问题...Google 在Android O上,修改了框架.Android O与之前的Android 版本相比,多出了一个vendor.img分区.在此之前的Android 系统架构当中,Android Framework ... -
Android O Settings源码流程分析(搜索栏篇(上))
2018-10-24 11:32:13Android O Settings 静态界面篇 界面渲染篇 数据加载篇之一级菜单 数据加载篇之二级菜单 数据加载篇之获取及修改默认设置属性值 搜索栏篇 Settings 搜索栏 上篇——界面 中篇——实现原理 下篇——搜索及... -
Error: Invoke-customs are only supported starting with Android O (--min-api 26)
2019-06-05 17:05:23compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 将代码添加到app的build.gradle的android节点下 -
AndroidO audio系统之框架简介(一)
2018-07-13 18:01:13Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理,它是Android中最复杂的子系统之一。本文将粗略分析一下audio的整体框架及播放、录制流程。不足之处,敬请指正,谢谢! ... -
Android O编译环境搭建,基于ubuntu16.04
2018-01-03 11:37:41目前准备做Android O的项目,然而下载了Android O的源码,编译发现有一堆的错误。网上查了一下Android O的编译环境和Android 5.1的还是有差异的。自己从新下载安装了ubuntu 16.04,摸索了一下,总结出下边的编译环境... -
Android O、N版本修改dex2oat编译选项,减少占用ROM空间或者加快安装速度
2018-11-12 15:48:59Android O版本、AndroidN版本 1.ROM过大可以通过调整–compiler-filter,减少apk生成odex文件所占据空间的大小,通常来说odex+vdex文件越大,说明dex2oat优化的类越多越彻底,性能也相对较好; 2.Apk安装时间过长...