build.gadle* に 'android-library' や 'kotlin-kapt' があったらやばい!

あるライブラリツールに Jake が反応しています。


👉 (1) Sam EdwardsさんはTwitterを使っています 「Looks like @AutonomousApps used "com.autonomousapps.dependency-analysis" for https://t.co/9rXv9Yb5tm But then there is "java-library", "kotlin-kapt", etc, etc. 🤔 https://t.co/yUFrUc2KLc」 / Twitter 

私的には、android-library はなかったものの kotlin-kapt はありました。

gradle 周りの記述は、どうしてもメンテが雑になっていたりします。

GitHub で検索してみます。

結構ヒットします。


👉 Search · android-library 

kotlin-kapt
👉 Search · kotlin-kapt 

つまり、こういうことでしょうかね。


plugins {
    id 'com.android.application'
-   id 'kotlin-android'
-   id 'android-library'
-   id 'kotlin-kapt'
+   id 'org.jetbrains.kotlin.android'
+   id 'org.jetbrains.kotlin.kapt'

あとは、不要な記述を消し去りたいのですが !

そんなツールを探していたのですが 😅😅😅


【Retorofit】コピペで使える NetworkModule【Dagger Hilt】

もうこれはテンプレ化しておきます。

Retrofit の話が中心となります。

👉 Retrofit 

 

Converter

Retrofit-Converters

JSON 形式のレスポンスをパースして変換するのは、Gson か Moshi が人気のように思います。


var retrofit = Retrofit.Builder()
  .baseUrl("https://api.example.com")
  .addConverterFactory(GsonConverterFactory.create())
  .build()


var retrofit = Retrofit.Builder()
  .baseUrl("https://api.example.com")
  .addConverterFactory(MoshiConverterFactory.create())
  .build()

👉 retrofit/retrofit-converters at master · square/retrofit 

今回は、Kotlin Serialization を利用した「Kotlin Serialization Converter」を使います。

ExperimentalSerializationApi なのですがね。


val contentType = "application/json".toMediaType()
val retrofit = Retrofit.Builder()
    .baseUrl("https://example.com/")
    .addConverterFactory(Json.asConverterFactory(contentType))
    .build()

👉 JakeWharton/retrofit2-kotlinx-serialization-converter: A Retrofit 2 Converter.Factory for Kotlin serialization. 

 

Call Adapter

Retrofit CallAdapters

通信の非同期処理はどれに任せるか。


var retrofit = Retrofit.Builder()
  .baseUrl("https://api.example.com")
  .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  .build()

👉 retrofit/retrofit-adapters at master · square/retrofit 

Coroutine を使った Jake製の「Kotlin Coroutine Adapter」は 今では DEPRECATED。

👉 JakeWharton/retrofit2-kotlin-coroutines-adapter: A Retrofit 2 adapter for Kotlin coroutine's Deferred type. 

Retrofit は 2.6.0+ で、内部に suspend function をサポートしてるので、特に、.addCallAdapterFactory() を使わなくてもよい。


@GET("users/{id}")
suspend fun user(@Path("id") id: Long): User

👉 retrofit/CHANGELOG.md at master · square/retrofit 

 

HttpLoggingInterceptor

OkHttpClient に HTTP関連のログを吐かせます。


--> POST /greeting http/1.1
Host: example.com
Content-Type: plain/text
Content-Length: 3

Hi?
--> END POST

<-- 200 OK (22ms)
Content-Type: plain/text
Content-Length: 6

Hello!
<-- END HTTP

👉 HttpLoggingInterceptor.Level (OkHttp Logging Interceptor 3.14.0 API) 


val logging = HttpLoggingInterceptor()
logging.setLevel(Level.BASIC)
val client = OkHttpClient.Builder()
  .addInterceptor(logging)
  .build()

👉 okhttp/okhttp-logging-interceptor at master · square/okhttp 

 

まとめ

Dagger の Module にしておきます。

テンプレート化してください、と言わんばかりに

よく似たものをあちこちで見かけますよね。

見通しも良くなります。

コピペでどうぞ。

(おわり)



iPhone連絡先アプリ だけが iCloud連絡先 のデータをエクスポートできない件

iPhone連絡先アプリ だけが  iCloud連絡先 のデータをエクスポートできない件

図からわかるように

iCloud 連絡先は、非Appleデバイスではアクセスできない。

iPhone連絡先アプリ だけが  iCloud連絡先 のデータをエクスポートできない件

Mac などパソコンがない場合は、iCloud 連絡先は iPhone 上では、連絡先アプリしかアクセスできない。

Android OS 上で iCloud 連絡先のデータを利用したい場合は、

iCloud 連絡先のデータをエクスポートして、Google コンタクトへインポートする。

しかないのだが、

iPhone連絡先アプリ だけが  iCloud連絡先 のデータをエクスポートできない件

iOS連絡先 アプリだけ iCloud連絡先 のデータをエクスポートできない。

Mac などパソコンがない状況では、iCloud 連絡先データは、エクスポートして、Googleコンタクトへインポートできないということになる。

まとめ

Apple、Google以外サードパーティツールを使えば状況は変わるが、そもそもは、

「iCloud連絡先 は、Appleデバイス間でのデータ共有クラウドツール。」

「Googleコンタクト は、あらゆるデバイスでのデータ共有クラウドツール。」

というそれぞれインターネットジャイアントのポリシー。

Googleコンタクト のが幅広く自在に使える。

👉 連絡先をクラウド上に保存する - 連絡先 / コンタクトの使い方まとめ その1【Android / iPhone】 
👉 Google コンタクト データをAndroid と iPhone で共有する - 連絡先 / コンタクトの使い方まとめ その2【Android / iPhone】 
👉 連絡先アプリ 必ず把握しておくべき全設定画面別使い方メモ- 連絡先 / コンタクトの使い方まとめ その3【Android → iPhone】 
👉 Googleコンタクト から iCloud連絡先 へ完全移行する手順 - 連絡先 / コンタクトの使い方まとめ その4 【Android → iPhone】