エラー: 要件 'internal::allowedManualInterface("android.test.Icallback")' により static_assert が失敗しましたインターフェイスを自動生成する .aidl ファイルを定義します。インターフェイスを手動で作成する必要がある場合は、その名前をホワイトリストに追加してください。」
IMPLEMENT_META_INTERFACE(callback, "android.test.Icallback");
Androidシステムのプライベートサービスバージョン28を開発する前はAndorid.mkを使用していましたが、コンパイルに大きな問題はありませんでした.
Android 11以降はAndorid.bpになり、コンパイル規則は特に厳格です.
以前のCS構造,プロセス間インターフェースはすべて自分で手書きです. 、
IMPLEMENT_META_INTERFACEの最新のコンパイルはstatic_assertでエラーを直接報告し、プロンプトを表示するにはホワイトリストを追加する必要があります;
#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME) \
static_assert(internal::allowedManualInterface(NAME), \
"b/64223827: 手動で書かれたバインダ インターフェイスは、" \
"エラーが発生しやすく、頻繁にバグがあると見なされます。" \
"インターフェイスを追加するための推奨される方法" \
"インターフェイスを自動生成する .aidl ファイルを定義することです。" \
"インターフェイスを手動で記述する必要がある場合は、その
名前をホワイトリストに追加してください。"); \
DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(インターフェース、名前) \
1. 最後に IInterface.h でホワイトリストを検索し、frameworks\native\libs\binder\include\binder\IInterface.h を追加するだけです
kManualInterfaces はホワイトリストに登録されています
2. 一時的なラフ回避
#ifndef DO_NOT_CHECK_MANUAL_BINDER_INTERFACES
#define DO_NOT_CHECK_MANUAL_BINDER_INTERFACES 1
#endif