Java高版本Api在Android中的使用方法详解
作者:newki 发布时间:2023-01-19 20:03:08
标签:java,高版本,api
Android插件开启对新Api的支持
这一天小王导入了一个库,上线之后直接崩了一大片? 找到其中的问题:
什么鬼哦?安卓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<widget> 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<User> 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<String> 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'
}
来源:https://juejin.cn/post/7098528855681400845
0
投稿
猜你喜欢
- JSONObject 与 JSONArray区别JSONObject:{"area": "武汉",&
- Jenkins集成Sonar过程中遇到的报错1、jenkins中无法添加sonarqube的token凭证因为添加的凭证类型错误,所以无法添
- Mybatis selectKey返回新增用户的id值一、需求:新增用户后,同时还要返回当前新增用户的id值id是由数据库的自动增长来实现的
- 引言应用 Java 的开源库,编写一个搜索引擎,这个引擎能爬取一个网站的内容。并根据网页内容进行深度爬取,获取所有相关的网页地址和内容,用户
- 1:gc日志输出在jvm启动参数中加入 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimes
- 目录MVC结构简介SpringMVC简介SpringMVC执行流程常用注解1. @Controller2. @ResponseBody3.
- package com.test;import org.htmlparser.Node;import org.htmlparser.Node
- 下面是一个AOP实现的简单例子:首先定义一些业务方法:/** * Created with IntelliJ IDEA. 
- 本文实例为大家分享了java使用字符画一个海绵宝宝的具体代码,供大家参考,具体内容如下用字符画一个海绵宝宝用" &ldqu
- 目录Directory:创建文件夹删除文件夹获取文件夹下的子文件夹获取同类型的文件判断文件夹是否存在移动文件夹总结之前发过File对文件的操
- ListJava 的list又分为 ArrayList 和 LinkedListArrayListprivate class Itr imp
- 本文实例为大家分享了java实现登录验证码功能的具体代码,供大家参考,具体内容如下登录验证码登录验证是大多数登录系统都会用到的一个功能,它的
- Java使用OpenCV3.2实现视频读取与播放,供大家参考,具体内容如下OpenCV从3.x版本开始其JAVA语言的SDK支持视频文件读写
- C#Process OutputDataReceived事件不触发问题描述项目需要用cmd调用其它软件,实时获取软件处理结果,并根据获取到的
- mybatis 查询返回Map<String,Object> 类型,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此
- 本文实例为大家分享了opencv实现轮廓高斯滤波平滑的具体代码,供大家参考,具体内容如下一个小测试的题目:在图像上点选,找到与点选处相邻的颜
- C#是托管型代码,创建的对象会自动回收。C++是非托管型代码,创建的对象需要手动回收(有时不手动回收,可能出现内存溢出的问题)。C#调用C+
- 二叉树的深度题目:输入一颗二叉树的根节点,求该树的的深度。输入一颗二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点
- 前言:本文源码基于spring-framework-5.3.10。mvc是spring源码中的一个子模块!一、RequestMappingH
- 使用@Indexed加快启动速度Spring读取@Component组件(派生性),有两种实现方式,一种是反射,一种是ASM。反射性能低主要