当前位置:

首页 > 编程开发 > Java高版本Api在Android中如何使用

Java高版本Api在Android中如何使用

Android插件开启对新Api的支持这一天小王导入了一个库,上线之后直接崩了一大片?找到其中的问题:什么鬼哦?安卓8.0一下无法使用?这样上线8.0以下的手机全部闪退了。查一下才知道需要开启插件启动对JavaApi的支持android{defaultConfig{multiDexEnabledtrue}compileOptions{//FlagtoenablesupportforthenewlanguageAPIscoreLibraryDesugaringEnabledtruesourceCompati

    Android插件开启对新Api的支持

    这一天小王导入了一个库,上线之后直接崩了一大片? 找到其中的问题:

    Java高版本Api在Android中如何使用

    什么鬼哦?安卓8.0一下无法使用? 这样上线8.0以下的手机全部闪退了。 查一下才知道需要开启插件启动对Java Api的支持

    android {
      defaultConfig {
        multiDexEnabled true
      }
    
      compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
    
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }
    
    dependencies {
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
    }

    一定要开启multiDexEnabled,原理就是编译时会单独打一个dex包,做一些兼容的处理。

    常用的需要兼容处理的类:

    1. LocalDate日期处理

    		// 日期
    		LocalDate today = LocalDate.now();
    		// 几号
    		int dayofMonth = today.getDayOfMonth();
    		// 星期几
    		int dayofWeek = today.getDayOfWeek().getValue();
    		// 今年
    		int dayofYear = today.getDayOfYear();
    		
    		LocalDate endOfFeb = LocalDate.parse("2018-02-28"); 
    
                    // 取本月第1天:
    		LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); 
    		// 取本月第2天:
    		LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); 
    
    		// 取本月最后一天,再也不用计算是28,29,30还是31:
    		LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
    
    		// 取下一天:
    		LocalDate firstDayOfNextMonth = lastDayOfThisMonth.plusDays(1); 
    
    		// 取2017年1月第一个周一:
    		LocalDate firstMondayOf2017 = LocalDate.parse("2017-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));

    2. Stream集合流操作

      List widgets = new ArrayList<>();
            widgets.add(new widget(Color.RED, "Name", 1));
            int sum = widgets.stream()
                    .filter(w -> w.getColor() == Color.RED)
                    .mapToInt(w -> w.getWeight())
                    .sum();
    
        List userList = Stream.
            of(arrayList).
            map(person -> new User(person.getName())).
            collect(Collectors.toList());
    
        //peek 和map类似-但是他更强大-它对每个元素执行操作并返回一个新的 Stream
        Stream.of("one", "two", "three", "four") 
        .filter(e -> e.length() > 3) 
        .peek(e -> System.out.println("Filtered value: " + e)) 
        .map(String::toUpperCase) 
        .peek(e -> System.out.println("Mapped value: " + e)) 
        .collect(Collectors.toList());
    
        //limit 返回 Stream 的前面 n 个元素;
        //skip 则是扔掉前 n 个元素
        List personList2 = persons.stream()
        .map(Person::getName)
        .limit(10)
        .skip(3)
        .collect(Collectors.toList()); 
        System.out.println(personList2);

    和Kotlin的一些操作符有点类型,现在项目都是Kotlin了,一般也用不到这玩意了,如果大家是Java的老项目,希望filter map集合的可以使用stream的api很方便的转换数据。

    AGP7编译的问题

    之前的项目编译的时候,由于我们的兼容代码是写在子模块的build.gradle的app模块编译之后会merge成功,运行也没有问题。但是前段时间项目升级到AGP之后,无法运行指定的api了,需要在运行模块app的build.gradle中添加兼容代码块才能运行,这里特此记录一下。

        ...
        repositories {
            maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
            google()
            maven { url 'https://jitpack.io' }
            mavenCentral()
            jcenter()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:7.0.3'
    
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    
            classpath 'com.google.gms:google-services:4.3.8'
        }
       ...

    app build.gradle需要添加

    android {
      defaultConfig {
        multiDexEnabled true
      }
    
      compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
    
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }
    
    dependencies {
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
    }
    本文内容来源于互联网,如有侵权请联系删除。
    作者最新文章
    编程开发 Android
    相关文章 更多
    C++动态数组初始化怎么写?常用语句与代码示例
    C++动态数组初始化怎么写?常用语句与代码示例

    深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

    三星 Galaxy A08 渲染图曝光:Helio G99 芯片与 6000mAh 电池配置解析
    三星 Galaxy A08 渲染图曝光:Helio G99 芯片与 6000mAh 电池配置解析

    三星 Galaxy A08(型号 SM-A085F)渲染图曝光,确认搭载联发科 Helio G99 芯片、8GB 内存及 6000mAh 电池,预装 Android 17。4G 版预计 2026 年 10 月发布,5G 版预计 2026 年 2 月推出。本文梳理硬件参数、发布时间及与前代 A07 的对比,供关注入门级三星机型的读者参考。

    索尼 Xperia 1 VIII / VII / VI 等手机获 Android 17 更新,新增桌面模式等功能
    索尼 Xperia 1 VIII / VII / VI 等手机获 Android 17 更新,新增桌面模式等功能

    索尼 Xperia 1 VIII / VII / VI 等机型已推送 Android 17 更新,核心新增桌面模式(需外接显示器、键鼠)及 AI 相机助手预设。更新包大小约 1.2GB,部分地区用户已收到推送(如英国、德国 Xperia 1 VIII 版本 73.1.A.2.61)。

    三星 Galaxy Z Fold8 内屏边角支撑偏软?实测与官方回应
    三星 Galaxy Z Fold8 内屏边角支撑偏软?实测与官方回应

    部分三星 Galaxy Z Fold8 用户反馈内屏边角按压时支撑力不足,出现轻微下陷。本文基于 Android Authority 的实测分析柔性钛金属结构的实际表现,探讨该现象是否影响日常使用及潜在硬件风险。

    Android接入MQTT并控制ESP8266温湿度数据的完整教程
    Android接入MQTT并控制ESP8266温湿度数据的完整教程

    本文提供Android接入MQTT服务并控制ESP8266的完整方案。通过规划主题、配置Android依赖与权限、订阅温湿度数据及下发LED控制指令,实现双向通信。适用于具备基础编程知识的开发者,帮助快速搭建物联网联调环境,解决连接失败、数据不同步等常见问题。

    中兴小鲜 70 Plus 手机现身中国电信终端产品库:紫光展锐 T8300 处理器、Android 16 系统
    中兴小鲜 70 Plus 手机现身中国电信终端产品库:紫光展锐 T8300 处理器、Android 16 系统

    中兴小鲜70Plus上架中国电信产品库,6.8英寸单挖孔屏,直角边框,3.5mm耳机孔。搭载紫光展锐T8300与安卓16,1300万单摄,6050mAh电池,8+128GB版,深空灰/晨曦金两色。

    谷歌发布Android 17 QPR1 Beta 4版本 无新功能仅Bug修复
    谷歌发布Android 17 QPR1 Beta 4版本 无新功能仅Bug修复

    谷歌于近日发布了安卓17QPR1Beta4,无任何新功能,专注于修复系统缺陷。适配包含Pixel6a至10a在内的多款设备,重点修复了鼠标光标消失、截图提示音与铃声绑定、五倍变焦视频卡顿、图形驱动性能下降等共计七项问题。

    谷歌Pixel支持政策生变:Android 17无缘Pixel 5及更早机型
    谷歌Pixel支持政策生变:Android 17无缘Pixel 5及更早机型

    谷歌宣布Android17正式版仅支持Pixel6及后续机型,Pixel5及更早的初代至Pixel5系列被排除在升级名单外,用户需考虑更换设备以获取最新系统支持。

    谷歌Pixel 11系列曝光信息汇总:Android 17与Tensor G6
    谷歌Pixel 11系列曝光信息汇总:Android 17与Tensor G6

    谷歌Pixel11系列预计预装Android17系统,搭载自研TensorG6芯片,主摄升级至5000万像素,强化AI与影像能力。同时,谷歌加速印度市场渠道布局,实现快速铺货。产品延续纯净安卓、自研芯片与影像优先策略。

    谷歌拟为Android新增闲置应用提醒 降低安全风险
    谷歌拟为Android新增闲置应用提醒 降低安全风险

    谷歌计划为Android系统新增闲置应用提醒功能,当应用从GooglePlay下架且开发者停止维护后,系统将主动通知用户删除。这些长期未更新的应用存在安全漏洞,可能被攻击者利用窃取隐私或劫持账户。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    赤友清理大师
    赤友清理大师
    macOS

    赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    WINDOWS 更多
    Windows 10
    Windows 10
    Windows

    Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

    极度公式
    极度公式
    Windows/macOS/Linux

    极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

    密码键盘
    密码键盘
    Windows/macOS/iOS/Android

    密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。