Android 설정

Android 플랫폼에서 응용 프로그램 설명자의 android 요소를 사용하여 Android 응용 프로그램 매니페스트에 정보를 추가할 수 있습니다. Android 응용 프로그램 매니페스트는 Android 운영 체제에서 사용하는 응용 프로그램 속성 파일입니다. ADT에서는 APK 패키지를 만들 때 Android Manifest.xml 파일을 자동으로 생성합니다. AIR는 특정 기능이 작동하는 데 필요한 값에 몇 가지 속성을 설정합니다. AIR 응용 프로그램 설명자 파일의 android 섹션에 설정된 다른 모든 속성은 Manifest.xml 파일의 해당 섹션에 추가됩니다.

참고: 대부분의 AIR 응용 프로그램에서는 응용 프로그램에 필요한 Android 권한을 android 요소 내에서 설정해야 하지만, 일반적으로 다른 속성은 설정할 필요가 없습니다.

문자열, 정수 또는 부울 값을 가지는 특성만 설정할 수 있습니다. 응용 프로그램 패키지에 있는 리소스에 대한 참조를 설정하는 것은 지원되지 않습니다.

참고: 런타임에는 14 이상의 최소 SDK 버전이 필요합니다. 따라서 더 높은 버전용으로만 응용 프로그램을 만들려는 경우에는 Manifest에 <uses-sdk android:minSdkVersion=""></uses-sdk>가 올바른 버전으로 포함되는지 확인해야 합니다.

예약된 Android 매니페스트 설정

AIR는 응용 프로그램 및 런타임 기능이 올바르게 작동하도록 하기 위해 생성된 Android 매니페스트 문서에서 여러 매니페스트 항목을 설정합니다. 다음 설정은 정의할 수 없습니다.

manifest 요소

manifest 요소의 다음 특성은 설정할 수 없습니다.

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

activity 요소

기본 activity 요소의 다음 특성은 설정할 수 없습니다.

  • android:label

  • android:icon

application 요소

application 요소의 다음 특성은 설정할 수 없습니다.

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Android 권한

Android 보안 모델에서는 보안 또는 개인 정보 보호와 관련된 기능을 사용할 경우 각 응용 프로그램이 권한을 요청하도록 요구하고 있습니다. 이러한 권한은 응용 프로그램이 패키지화될 때 지정되어야 하며, 런타임에 변경될 수 없습니다. Android 운영 체제에서는 사용자가 응용 프로그램을 설치할 때 해당 응용 프로그램이 어떤 권한을 요청하는지를 알려 줍니다. 기능에 필요한 권한이 요청되지 않는 경우 Android 운영 체제에서는 응용 프로그램이 해당 기능에 액세스할 때 예외가 발생할 수도 있지만, 항상 그런 것은 아닙니다. 예외는 런타임을 통해 응용 프로그램으로 전송됩니다. 감지되지 않는 오류의 경우에는 Android 시스템 로그에 권한 오류 메시지가 추가됩니다.

AIR에서는 응용 프로그램 설명자의 android 요소 내에 Android 권한을 지정합니다. 권한을 추가할 때는 다음 포맷이 사용됩니다(여기서 PERMISSION_NAME은 Android 권한의 이름).

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

manifest 요소 내의 uses-permissions 문은 Android 매니페스트 문서에 바로 추가됩니다.

다양한 AIR 기능을 사용하려면 다음 권한이 필요합니다.

ACCESS_COARSE_LOCATION
응용 프로그램에서 Geolocation 클래스를 통해 WIFI 및 셀룰러 네트워크 위치 데이터에 액세스할 수 있도록 허용합니다.

ACCESS_FINE_LOCATION
응용 프로그램에서 Geolocation 클래스를 통해 GPS 데이터에 액세스할 수 있도록 허용합니다.

ACCESS_NETWORK_STATE 및 ACCESS_WIFI_STATE
응용 프로그램에서 NetworkInfo 클래스를 통해 네트워크 정보에 액세스할 수 있도록 허용합니다.

CAMERA
응용 프로그램에서 카메라에 액세스할 수 있도록 허용합니다.
참고: 카메라 기능을 사용하기 위한 권한을 요청하면 Android에서는 응용 프로그램도 카메라를 필요로 하는 것으로 가정합니다. 카메라가 응용 프로그램의 선택적 기능인 경우에는 uses-feature 요소를 카메라의 매니페스트에 추가하여 필수 특성을 false로 설정해야 합니다. Android 호환성 필터링을 참조하십시오.

INTERNET
응용 프로그램에서 네트워크 요청을 수행할 수 있도록 허용하고 원격 디버깅도 허용합니다.

READ_PHONE_STATE
AIR 런타임에서 전화 통화 중에 오디오를 음소거할 수 있도록 허용합니다. 응용 프로그램이 백그라운드에서 오디오를 재생하는 경우 이 권한을 설정해야 합니다.

RECORD_AUDIO
응용 프로그램에서 마이크에 액세스할 수 있도록 허용합니다.

WAKE_LOCK 및 DISABLE_KEYGUARD
응용 프로그램에서 장치가 SystemIdleMode 클래스 설정을 사용하여 대기 모드로 들어가지 못하게 할 수 있도록 허용합니다.

WRITE_EXTERNAL_STORAGE
응용 프로그램에서 장치의 외부 메모리 카드에 쓸 수 있도록 허용합니다.

예를 들어 모든 권한을 요구하는 응용 프로그램에 대한 권한을 설정하려면 응용 프로그램 설명자에 다음을 추가하면 됩니다.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android 사용자 정의 URI 스킴

사용자 정의 URI 스킴을 사용하여 웹 페이지 또는 기본 Android 응용 프로그램에서 AIR 응용 프로그램을 실행할 수 있습니다. 사용자 정의 URI 지원은 Android 매니페스트에 지정된 intent filter를 사용하므로 이 기술을 다른 플랫폼에서 사용할 수는 없습니다.

사용자 정의 URI를 사용하려면 <android> 블록 내에서 응용 프로그램 설명자에 intent-filter를 추가하십시오. 다음 예제의 두 intent-filter 요소를 모두 지정해야 합니다. 사용자 정의 스킴의 URI 문자열이 반영되도록 <data android:scheme="my-customuri"/> 문을 편집합니다.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

intent filter는 해당 응용 프로그램을 사용하여 특정 작업을 수행할 수 있음을 Android 운영 체제에 알려 줍니다. 사용자 정의 URI의 경우 이는 사용자가 해당 URI 스킴을 사용하는 링크를 클릭했다는 의미입니다(그리고 브라우저에서는 이를 처리하는 방법을 인식하지 못함).

사용자 정의 URI를 통해 응용 프로그램을 호출할 때는 NativeApplication 객체가 invoke 이벤트를 전달합니다. 쿼리 매개 변수를 비롯한 링크의 URL은 InvokeEvent 객체의 arguments 배열에 배치됩니다. intent-filter는 수에 관계없이 사용할 수 있습니다.

참고: StageWebView 인스턴스의 링크는 사용자 정의 URI 스킴을 사용하는 URL을 열 수 없습니다.

Android 호환성 필터링

Android 운영 체제는 응용 프로그램 매니페스트 파일에서 다수의 요소를 사용하여 응용 프로그램이 특정 장치와 호환되는지 여부를 확인합니다. 이 정보를 매니페스트에 추가하는 것은 선택 사항입니다. 이러한 요소를 포함하지 않으면 응용 프로그램이 모든 Android 장치에 설치될 수 있습니다. 하지만 어떠한 Android 장치에서도 제대로 작동하지 않을 수 있습니다. 예를 들어 카메라가 없는 휴대폰에서는 카메라 응용 프로그램이 크게 유용하지 않을 것입니다.

필터링에 사용할 수 있는 Android 매니페스트 태그는 다음과 같습니다.

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk(AIR 3 이상)

카메라 응용 프로그램

응용 프로그램에 대해 카메라 권한을 요청하는 경우 Android는 자동 포커스, 플래시 등 사용 가능한 모든 카메라 기능이 응용 프로그램에 필요하다고 가정합니다. 응용 프로그램에서 모든 카메라 기능이 필요하지 않거나 카메라가 선택적인 기능일 경우에는 카메라의 다양한 uses-feature 요소를 설정하여 선택 사항임을 나타내야 합니다. 이렇게 하지 않으면 특정 기능이 없거나 카메라가 전혀 없는 장치를 보유한 사용자들이 Android Market에서 귀하의 응용 프로그램을 찾을 수 없습니다.

다음 예제에서는 카메라에 대한 권한을 요청하고 모든 카메라 기능을 선택 사항으로 만드는 방법을 보여 줍니다.

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

오디오 녹음 응용 프로그램

오디오를 녹음하기 위한 권한을 요청할 경우 Android에서는 응용 프로그램에 마이크도 필요한 것으로 가정합니다. 오디오 녹음이 응용 프로그램의 선택적 기능일 경우 uses-feature 태그를 사용하여 마이크가 필수가 아님을 지정할 수 있습니다. 이렇게 하지 않으면 마이크가 없는 장치의 사용자들이 Android Market에서 귀하의 응용 프로그램을 찾을 수 없습니다.

다음 예제에서는 마이크 하드웨어를 선택 사항으로 지정한 상태에서 마이크 사용 권한을 요청하는 방법을 보여 줍니다.

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

설치 위치

Android manifest 요소의 installLocation 특성을 auto 또는 preferExternal로 설정함으로써 응용 프로그램을 외부 메모리 카드에 설치하거나 외부 메모리 카드로 이동하는 것을 허용할 수 있습니다.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android 운영 체제에서는 응용 프로그램이 외부 메모리에 확실히 설치된다고 보장하지 않습니다. 사용자는 시스템 설정 응용 프로그램을 사용하여 내부 및 외부 메모리 간에 응용 프로그램을 이동할 수도 있습니다.

외부 메모리에 설치된 경우에도 app-storage 디렉토리의 내용, 공유 객체, 임시 파일 등의 응용 프로그램 캐시 및 사용자 데이터는 여전히 내부 메모리에 저장됩니다. 내부 메모리를 너무 많이 사용하지 않도록 하려면 응용 프로그램 저장소 디렉토리에 저장할 데이터를 신중하게 선택하십시오. File.userDirectory 또는 File.documentsDirectory 위치(둘 다 Android에서 SD 카드의 루트에 매핑됨)를 사용하여 많은 양의 데이터를 SDCard에 저장해야 합니다.

Flash Player 및 StageWebView 객체의 다른 플러그인 활성화

Android 3.0 이상의 경우 StageWebView 객체의 플러그인 내용을 표시하려면 응용 프로그램이 Android 응용 프로그램 요소에서 하드웨어 가속화를 활성화해야 합니다. 플러그인 렌더링을 사용하려면 application 요소의 android:hardwareAccelerated 특성을 true로 설정합니다.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

색상 심도

AIR 3 이상에서는 런타임이 디스플레이에서 32비트 색상을 렌더링하도록 설정합니다. 이전 버전의 AIR에서는 런타임이 16비트 색상을 사용합니다. 응용 프로그램 설명자의 <colorDepth> 요소를 사용하여 런타임이 16비트 색상을 사용하도록 할 수도 있습니다.

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

16비트 색상 심도를 사용하면 렌더링 성능이 증가하지만 색상 충실도가 떨어질 수 있습니다.