Java高版本Api在Android中的使用方法详解

作者:newki 时间:2023-01-19 20:03:08 

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<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

标签:java,高版本,api
0
投稿

猜你喜欢

  • springboot整合mybatis的超详细过程(配置模式+注解模式)

    2023-10-03 09:54:03
  • Java中弱引用和软引用的区别以及虚引用和强引用介绍

    2023-01-23 18:55:33
  • Java中Future和FutureTask的示例详解及使用

    2023-01-29 11:48:42
  • C#常用目录文件操作类实例

    2023-06-24 13:30:24
  • java配置多个过滤器优先级以及几个常用过滤器操作

    2023-12-17 01:52:10
  • response对象的使用(实例讲解)

    2023-11-30 12:23:22
  • Spring与Shiro整合及加载权限表达式问题

    2023-10-01 09:29:50
  • java 多态与抽象类详解总结

    2022-04-19 10:59:18
  • Java基于Tcp/ip连接的多人交互聊天室

    2022-03-31 17:47:35
  • Java实现多文件压缩加密并重命名压缩文件对象的方法

    2021-07-02 15:44:31
  • java查询mongodb中的objectid示例

    2022-03-06 08:59:21
  • Java多线程ThreadAPI详细介绍

    2023-04-14 12:19:18
  • Java BigDecimal除法精度和格式化输出方式

    2023-01-06 01:03:42
  • 详解Spring框架下向异步线程传递HttpServletRequest参数的坑

    2021-05-31 04:45:21
  • Java 回调函数深入理解

    2023-11-01 17:32:04
  • 从源码编译Android系统的Java类库和JNI动态库的方法

    2022-05-01 17:55:44
  • Java代码注释规范(动力节点整理)

    2022-10-26 21:01:50
  • Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法

    2023-04-28 20:42:22
  • c# 如何使用 My 命名空间

    2022-12-25 20:23:39
  • C#中ListView控件实现窗体代码

    2023-02-04 02:55:06
  • asp之家 软件编程 m.aspxhome.com