DelphiでビルドしたアプリをAndroidデバイスに配置すると、No resource identifier found for attribute 'requestLegacyExternalStorage' というエラーが発生することがある

提供: Support
移動先: 案内検索

対象となるIDE製品

  • Delphi 10.4以降

問題

DelphiのAndroid 64ビット向けコンパイラ(dccarm64)によってビルドされたアプリを配置すると、パッケージングを行う際に以下のようなエラーが発生することがあります。

[PAClient Error] Error: E2312 <プロジェクトパス>\AndroidManifest.xml:20: error: No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android'

原因

10.4以降では、新規にFireMonkeyアプリケーションのプロジェクトを作成すると AndroidManifest.xmlの定義にrequestLegacyExternalStorageマニフェスト属性がデフォルトで追加されます。


AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
..
 <application android:persistent="False" 
       android:restoreAnyVersion="False" 
       android:label="Project1" 
       android:debuggable="True" 
       android:largeHeap="False"
       android:icon="@drawable/ic_launcher"
       android:theme="@style/AppTheme"
       android:hardwareAccelerated="true"
       android:resizeableActivity="false"
       android:requestLegacyExternalStorage="true">
..
</application>
</manifest>


requestLegacyExternalStorageマニフェスト属性は、'Android 29' API レベル以降で利用可能な項目で、古いAPI レベル(例えば、Android 26)では、このマニフェスト属性には対応しておらず、エラーになります。


10.4よりも前のバージョンで作成した既存のFireMonkeyアプリケーションのプロジェクトを移行すると、requestLegacyExternalStorageマニフェスト属性を使用しない古いバージョンの AndroidManifest.template.xmlファイルが含まれている可能性があり、10.4で、この問題が顕在化しないことがあります。


しかしながら、10.4でプロジェクトを新規作成、あるいは既存のプロジェクトでAndroidManifest.template.xmlファイルが requestLegacyExternalStorage'マニフェスト属性を使用するように更新すると、必要なAndroidのAPIレベルの要求を満たしていないため、同じくエラーが発生いたします。

解決

SDKマネージャのAndroid 64ビットの環境設定で、”SDK API レベルの場所“をAndroid 29のAPIレベルを参照するように設定を変更してください。


以下の図は、必要なAndroid 29のSDK Platformが見つからない、あるいはPCにインストールしていないため、"警告マーク"が表示されています。

Thumb03000218ujpn.png


もし上図のように警告マークが表示されている場合は、AndroidのSDKマネージャを実行し、Android 29のSDK Platformを手動でダウンロードしてください。

AndroidのSDKマネージャを実行する方法は、こちらを参照ください。


以下の図は、AndroidのSDKマネージャの画面です。

Thumb03000217ujpn.png


Android 29のSDK Platformを選択してダウンロードしてください。