Android で Java 上位バージョン API を使用する方法
Apr 18, 2023 pm 09:07 PMAndroid プラグインが新しい API のサポートを開始
この日、Xiao Wang はライブラリをインポートしましたが、その直後にその大部分がクラッシュしました。オンラインになりましたか?問題を見つけてください:
#一体どういうことですか? Android8.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. ストリーム コレクション フローの操作
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 プロジェクトの場合は、フィルター マップ コレクションがストリーム API を使用して簡単にデータを変換できることを願っています。
AGP7 コンパイルの問題
前のプロジェクトがコンパイルされたとき、互換性コードはサブモジュールの build.gradle に記述されていたため、アプリ モジュールはコンパイル後に正常にマージされ、走行には問題ありません。ただし、しばらく前にプロジェクトが AGP にアップグレードされた後、指定された API を実行できません。実行するには、実行中のモジュール アプリの 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 で Java 上位バージョン API を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Xiaomi Redmi Note 14 Pro Plusは、Light Hunter 800カメラを搭載した初のQualcomm Snapdragon 7s Gen 3スマートフォンとして登場します

Oppo Find X8のデザインは、初期の画像ではApple iPhone 16 ProとOnePlus Openを組み合わせたように見えます

iQOO Z9 Turbo+ は、「驚異的な」バッテリー寿命を備えた Dimensity 9300+ スマートフォンとしてデビューします

Samsung Galaxy Z Fold Special Edition、競合する名前が浮上、10月下旬に発売されることが判明
