精华内容
下载资源
问答
  • 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 (--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 实现应用更新(适配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) 解决方法: 在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
    }
    

    如图所示:
    在这里插入图片描述

    展开全文
  • om.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:42
    Android 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:04
    Android O (8.0) 新特性介绍Android O 功能和 API(文章内容均来Google开发者官网,有需要可自行翻墙查看更多资料)Android O 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。请务必查阅 Android O...
  • Android O的大变更Android O这次来了一个大手笔,谷歌的人第一次到下游厂商进行宣导,并指出了并开始向各家厂商灌输谷歌的新理念:彻底解决Android版本碎片化的问题我有幸参加了这次宣讲,虽然由于临近国庆没有拿到...
  • Android O (8.0) 新特性介绍

    万次阅读 2017-06-15 16:35:45
    Android O 功能和 API(文章内容均来Google开发者官网,有需要可自行翻墙查看更多资料)Android O 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。请务必查阅 Android O 行为变更以了解平台变更...
  • AndroidO 下图形显示框架变化介绍

    千次阅读 多人点赞 2018-05-07 10:07:53
    也在不断变化修改,但主体框架未变,依然保持Android4.0上定制的实现结构,只是类命名更加清晰,实现方式更加明了,同时随着HAL版本的不断升级,增加了一些额外的接口,随着AndroidO引入Treble架构,显示框架也作了...
  • AS报错: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...
  • 在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:48
    11 @@ 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的项目上开发应用程序时, 需要用到系统的一些功能, 想在源码中打包出一个功能丰富的jar包, 然后在IDE中使用, 比如Eclipse中使用, 这中间碰到了很多问题. 使用BUILD_JAVA_LIBRARY...
  • Android 报错: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:34
    Android 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)时,如何让...
  • Error: 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 静态界面篇 界面渲染篇 数据加载篇之一级菜单 数据加载篇之二级菜单 数据加载篇之获取及修改默认设置属性值 搜索栏篇 Settings 搜索栏 上篇——界面 中篇——实现原理 下篇——搜索及...
  • compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 将代码添加到app的build.gradle的android节点下
  • AndroidO audio系统之框架简介(一)

    万次阅读 2018-07-13 18:01:13
           Audio系统在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版本、AndroidN版本 1.ROM过大可以通过调整–compiler-filter,减少apk生成odex文件所占据空间的大小,通常来说odex+vdex文件越大,说明dex2oat优化的类越多越彻底,性能也相对较好; 2.Apk安装时间过长...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 216,788
精华内容 86,715
关键字:

Android O