SDKバージョン26で導入されたシンボルを参照するAndroidapi.Sensor.pasの問題により、アプリケーションがSDKバージョン22を参照するときにリンクエラーが発生します。

C++Builder 10.3.3を利用してAndroidアプリケーションを構築している場合、エラー[ldandroid Error] "ld"がコード1で終了する場合があります。
Delphiでシンボル名(例えば、スクリプトを使って、Grijjy社のブログ記事に掲載のエラー報告コードのような、Androidのサードパーティのコールスタックライブラリによって生成されたコールスタックからシンボルを取得する)を一致させようとすると、Delphi 10.3.3では同じ問題が原因で異なる症状が発生し、リンカエラーも発生します。

この問題は、Androidapi.Sensor.pasファイルのいくつかのシンボルがAndroid SDKバージョン26でのみ導入されているために発生しますが、アプリケーションはこれらのシンボルが存在しないバージョン22にリンクされます。エラーを解決するには、ユニットのローカルコピーを作成し、シンボルをコメントアウトしてください。

回避策

  1. C:\Program Files(x86)\Embarcadero\Studio\20.0\source\rtl\android\でAndroidapi.Sensor.pasおよびAndroidapi.incファイルを探します(別の場所にインストールした場合は、同名のファイルを探します) 。
  2. Androidapi.Sensor.pasとAndroidapi.incをプロジェクトのソースフォルダにコピーし、Androidapi.Sensor.pasのみをプロジェクトに追加します。 Androidapi.incは、コピーしたAndroidapi.Sensor.pasをビルドするために必要です。
  3. Androidapi.Sensor.pasファイルを開き、次のシンボルの宣言を見つけてコメントアウトします。
    • ASensorManager_getInstanceForPackage
    • ASensorManager_getDefaultSensorEx
    • ASensorManager_createSharedMemoryDirectChannel
    • ASensorManager_createHardwareBufferDirectChannel
    • ASensorManager_destroyDirectChannel
    • ASensorManager_configureDirectReport
    • ASensorEventQueue_registerSensor
    • ASensor_isDirectChannelTypeSupported
    • ASensor_getHighestDirectReportRateLevel
  4. 次のバージョン(例えば、10.4)にアップグレードするときに、Androidapi.Sensor.pasとAndroidapi.incファイルのローカルコピーをプロジェクトから削除してください。

お礼

Brian Long氏は親切にもこの問題とその回避策について長い記事を書いてくれた。ありがとう、Brian!

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy.

Start Free Trial   Free Delphi Community Edition   Free C++Builder Community Edition   Upgrade Today  

Anonymous