![android | Embarcadero RAD Studio Delphi C++Builder Blogs](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/08/android-1.jpg?resize=1140%2C628&ssl=1)
Android 64-bitのTInAppPurchaseコンポーネントに重大な問題が見つかったため、FMXのコードを直接修正する回避策を以下に示します。
RAD Studio 10.3.3のリリース後、DelphiではじめてAndroid 64-bitのサポートが含まれましたが、TInAppPurchaseコンポーネントを使用するアプリケーションを再コンパイルする際に生じる問題が数名のお客様から報告されました。 これらのアプリケーションをAndroid 64-bitおよびランタイム用にコンパイルすると、アクセス違反が発生いたします。
これらの問題は、Quality Portalに以下のように報告されています。
RSP-27228 InAppPurchase.QueryProducts crash App in Android64
RSP-27140 Android 64 bit app crashes when calling TInAppPurchase.QueryProducts
これらのレポートは2人の異なるお客様によってエスカレートされ、開発チームに確認してもらい、その原因が判明しました。弊社で行っているAndroid 32ビットからAndroid 64ビットへ移行に必要な手順としてFMXのデータ型をCardinal(すべてのプラットフォームで同じサイズ)からNativeUInt(プラットフォーム固有)に変更しています。
しかしFMXの内部コードの、ある1つのデータ型の変更を逃していたことがわかりました。 この問題は、そのデータ型をCardinalからTFmxHandle(NativeUInt)へ変更することで回避できます。
この問題の対処は、以下の手順で行うことができます。
- C:Program Files(x86)EmbarcaderoStudio20.0sourcefmxフォルダ内のFMX.Helpers.Android.pasファイルを探します。(別の場所にインストールした場合は、同じファイルを探します)
- FMX.Helpers.Android.pasをプロジェクトのソースフォルダにコピーし、FMX.Helpers.Android.pasをプロジェクトに追加します。
- FMX.Helpers.Android.pasファイルを開いて、ソースの250行目のコードを以下のように変更します。
(修正前) FTimerHandle: Cardinal;
(修正後) FTimerHandle: TFmxHandle;
以下は、コード修正後のコードスニペットの画像です。
今回行った修正箇所が確認できます。
この修正によってアクセス違反が発生する問題は解決いたします。
なお、RAD Studioの次のバージョン(10.4)のリリースには、この修正が含まれる予定です。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition