Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
Delphi

Delphi Android 64-bitアプリ内購入の修正

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)へ変更することで回避できます。

この問題の対処は、以下の手順で行うことができます。

  1. C:Program Files(x86)EmbarcaderoStudio20.0sourcefmxフォルダ内のFMX.Helpers.Android.pasファイルを探します。(別の場所にインストールした場合は、同じファイルを探します)
  2. FMX.Helpers.Android.pasをプロジェクトのソースフォルダにコピーし、FMX.Helpers.Android.pasをプロジェクトに追加します。
  3. FMX.Helpers.Android.pasファイルを開いて、ソースの250行目のコードを以下のように変更します。
    (修正前) FTimerHandle: Cardinal;
    (修正後) FTimerHandle: TFmxHandle;

以下は、コード修正後のコードスニペットの画像です。
今回行った修正箇所が確認できます。

この修正によってアクセス違反が発生する問題は解決いたします。
なお、RAD Studioの次のバージョン(10.4)のリリースには、この修正が含まれる予定です。


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

   Free Delphi Community Edition   Free C++Builder Community Edition

関連記事
DelphiRAD Studio

Androidアプリの実行パーミッションを簡単に制御可能な「Mobile Permissions Component」

C++Delphi

Android APIをFireMonkey Androidプロジェクトで利用可能なDelphiおよびC++Builderユニットに変換する

C++Delphi

DelphiおよびC++BuilderプロジェクトでWindowsポータブルデバイス(WPD)を有効にする

C++ニュース

C++Builder 10.4 Sydney の Win32およびWin64で、C++17 アルゴリズムライブラリ並列ソートを使用する

コメント

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

IN THE ARTICLES