【Android】Hilt + KSP で error.NonExistentClass を解決するヒント - Protobuf / SQLDelight / ViewBinding / AIDL

見かけましたよね。

以下に似たようなエラー。


e: [ksp] InjectProcessingStep was unable to process 'RemoteUnfoldTransitionReceiver(boolean,java.util.concurrent.Executor)' because 'error.NonExistentClass' could not be resolved.

Dependency trace:
    => element (CLASS): com.android.systemui.unfold.progress.RemoteUnfoldTransitionReceiver
    => type (ERROR superclass): error.NonExistentClass

If type 'error.NonExistentClass' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'error.NonExistentClass' is on your classpath.
e: [ksp] InjectProcessingStep was unable to process 'UnfoldTransitionProgressForwarder()' because 'error.NonExistentClass' could not be resolved.

Dependency trace:
    => element (CLASS): com.android.systemui.unfold.progress.UnfoldTransitionProgressForwarder
    => type (ERROR superclass): error.NonExistentClass

If type 'error.NonExistentClass' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'error.NonExistentClass' is on your classpath.
e: [ksp] ComponentProcessingStep was unable to process 'com.android.systemui.unfold.RemoteUnfoldSharedComponent' because 'error.NonExistentClass' could not be resolved.

Dependency trace:
    => element (CLASS): com.android.systemui.unfold.progress.RemoteUnfoldTransitionReceiver
    => type (ERROR superclass): error.NonExistentClass

If type 'error.NonExistentClass' is a generated type, check above for compilation errors that may have prevented the type from being generated. Otherwise, ensure that type 'error.NonExistentClass' is on your classpath.
e: Error occurred in KSP, check log for detail

私は、SDKバージョンアップ時に SQLDelight で出会いましたが以下で回避。


// bottom of app/build.gradle.kts

androidComponents {
  onVariants(selector().all()) { variant ->
    afterEvaluate {
      val capName = variant.name.capitalize()
      tasks.getByName<KotlinCompile>("ksp${capName}Kotlin") {
        setSource(tasks.getByName("generate${capName}DatabaseInterface").outputs)
      }
    }
  }
}

👉 [ksp] InjectProcessingStep was unable to process a class which extends Binder Stub because 'error.NonExistentClass' could not be resolved. · Issue #4158 · google/dagger

こんな「とりあえず回避」ってのよくありますが

対応コードが溜まっていくと後々意味不明になるので

なんか嫌ですけど、

仕方ないんですよね。

👉 SqlDelight inconsistency with KSP · Issue #5473 · sqldelight/sqldelight
👉 KSP Compilation Failure: Unresolved `error.NonExistentClass` during `MarketDaoImpl` and `LocalDatasourceModule` processing · Issue #2092 · google/ksp
👉 SQLDelight 2.0 Tasks · Issue #2694 · sqldelight/sqldelight


【Android】AGP を 8.3+ にすると AD_SERVICES_CONFIG プロパティが衝突する

バージョンアップ作業。

はい、またエラー出ました。


Error:
	Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/ga_ad_services_config) from [com.google.android.gms:play-services-measurement-api:21.5.1] AndroidManifest.xml:32:13-58
	is also present at [com.google.android.gms:play-services-ads-lite:22.6.0] AndroidManifest.xml:92:13-59 value=(@xml/gma_ad_services_config).
	Suggestion: add 'tools:replace="android:resource"' to <property> element at AndroidManifest.xml to override.

Google Issue Tracker で以下。

From the Android Studio team:
This is a known issue of the AdMob and Google Services libraries
(AGP before 8.3 would have not surfaced the conflicts between the property definitions, which is why you see this during upgrade of AGP)

The solution suggested from the error message is the right one
Until the libraries are fixed: just override the property yourself in your AndroidManifest.xml

Android Studio チームからのコメント:
これは AdMob および Google Services ライブラリに関する既知の問題です。
(AGP 8.3 より前のバージョンでは、プロパティの定義間の競合が表面化しなかったため、AGP をアップグレードした際にこの問題が発生します)

エラーメッセージで提案されている解決策が正しい方法です。
ライブラリが修正されるまでの間は、AndroidManifest.xml 内でプロパティを自分で上書きしてください。


<property
    android:name="android.adservices.AD_SERVICES_CONFIG"
    android:resource="@xml/gma_ad_services_config"
    tools:replace="android:resource" />

DESCRIBE THE ISSUE IN DETAIL: I am not sure where can I report this issue as it seems it is more related to AdMob and Google Services manifest conflict. However this issue appears after updating to Iguana and AGP from 8.2.2 to 8.3 and Gradle 8.2 to 8.4.

この問題の報告先が分からず困っています。問題の原因は、AdMob と Google Services の AndroidManifest.xml における競合に関連しているように見えます。しかし、この問題は Iguana にアップデートし、Android Gradle Plugin (AGP) を 8.2.2 から 8.3 に、また Gradle を 8.2 から 8.4 に更新した後に発生するようになりました。

Status は Assigned のままで、まだ最近でも出ている模様。

sa...@meteoblue.com #50Nov 20, 2024 05:40PM
I upgraded from com.google.android.gms:play-services-ads:22.3.0' to com.google.android.gms:play-services-ads:23.5.0 and this error came.

<application> タグ内に書けばいいのか。

👉 Merge conflict with AndroidManifest in Android Studio Iguana [327696048] - Issue Tracker


ポリシーステータス「アプリは Android 14(API レベル 34) 以降を対象とする必要があります。」が消えない

かなり遅れて、今さらなのですが。

このポリシーステータスのメッセージ。


アプリは Android 14(API レベル 34) 以降を対象とする必要があります。

アプリ自体は、

SDKのターゲットバージョン35にして

公開完了してるにこのメッセージが消えない。

なんでかな。

 

🧑🏻‍💻 すぐには消えない?

Check that all tracks are updated (even paused tracks). If they are then give it a few days for the message to disappear.

すべてのトラックが更新されていることを確認してください(一時停止したトラックも)。もしそうなら、メッセージが消えるまで数日待ってください。

👉 How can I clear this message because now my target API is 34 - Google Play Developer Community

It turned out that I need to wait for 24 hours for the message to disappear. I don't know why it's not instant even though the target api is clearly within the policy requirements. Maybe they check these manually. Anyway it's solved.

メッセージが消えるまで24時間待つ必要があることが判明しました。ターゲットAPIが明らかにポリシー要件の範囲内であるにもかかわらず、なぜそれが即時ではないのかわかりません。おそらく彼らはこれらを手動でチェックします。とにかく解決しました。

👉 i still get this warning (App must target Android 14 (API level 34) or higher) even though iupdated - Google Play Developer Community

 

🧑🏻‍💻 結果

大体6時間後に確認すると消えてました!