Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

안드로이드 최신 버전(11, 12 등) 개발을 할 때 델파이 11 알렉산드리아를 사용하는 방법과 기본 지식들


Recommended Posts

짐 메키트 (Jim Mckeeth)"Developing for Android 11 & 12 with Delphi 11 Alexandria" 을 번역했습니다. (원문 작성: 2022년 2월, 최종 번역: 2022년 3월)

옮긴이:

  • 원문 작성일이 번역일 기준 1년 1개월 전임을 고려하고 읽기 바랍니다. 
    • IT 환경은 매우 빠르게 변하고, 델파이도 이에 맞추어 변하고 있습니다).
  • 그럼에도 불구하고 안드로이드 앱을 개발하는 델파이 개발자에게 도움되는 내용이라고 판단되어 늦었지만 번역하였습니다.

안드로이드 11은 새 스마트폰 대부분에 탑재되어 제공된다. 하지만, 안드로이드 12는 모든 픽셀(Pixel) 장비에 들어있다. 이 웨비나는 안드로이드 11과 12에서 달라진 것이 무엇인지를 살펴보고, 안드로이드 개발에 적용할 수 있는 가장 좋은 적용 방법와 팁을 제공한다.

발표자료 보기/다운로드

 

목차


1 데스트탑, 모바일,태블릿 OS(운영 체제) 시장 점유율

spacer.png

https://gs.statcounter.com/os-market-share/desktop-mobile-tablet/worldwide/#monthly-200901-202201

2 모바일 장비 제조사 시장 점유율 추이 (2020.1 - 2022.1)

spacer.png

https://gs.statcounter.com/vendor-market-share/mobile/worldwide/#monthly-202001-202202

3 모바일 장비 제조사 시장 점유율 (2022.1)

spacer.png

https://gs.statcounter.com/vendor-market-share/mobile/worldwide/#monthly-202001-202202

4 안드로이드 vs iOS 시장 점유율 추이 (2020.1 - 2022.1)

spacer.png

https://gs.statcounter.com/vendor-market-share/mobile/worldwide/#monthly-202001-202202

5 모바일 안드로이드 버전 시장 점유율 추이 (2020.1 - 2022.1)

spacer.png

https://gs.statcounter.com/android-version-market-share/mobile/worldwide/#monthly-202001-202201

6 모바일 안드로이드 버전 시장 점유율 (2022.1) 

spacer.png

2022년 현재 안드로이드 11이 가장 많이 사용되고 있다.

  • Android 12 released Oct 4, 2021
  • Android 11 released Sept 8, 2020
  • Android 10 released Sept 3, 2019
  • Android 9 released Aug 6, 2018

 

  • Android 12 = API 31
  • Android 11 = API 30
  • Android 10 = API 29
  • Android 9 = API 28 (Pie)

https://gs.statcounter.com/android-version-market-share/mobile/worldwide/#monthly-202001-202201 

7 안드로이드 플레이의 보안 및 성능 요구 사항

  • 매년마다 targetSdkVersion 요구사항이 올라간다. 새 안드로이드 버전이 출시되면 그로부터 1년 이내에 새 앱 등록과 기존 앱 업데이트 시 해당 API 업데이트 버전 또는 그 이상을 목표로 해야 한다.
  • 2021년 11
    • 타겟 API 레벨 30 (안드로이드 11)
    • 안드로이드 앱 번들(App Bundle) 포맷으로 게시(Publish)
  • 구글 플레이 콘솔에서 요구하는 사항
  • API 마이그레이션 가이드를 통해 기타 변경 사항 확인하기:  developer.android.com/distribute/best-practices/develop/target-sdk

8 델파이 11에서 안드로이드 관련 변경

옮긴이: 원문 작성 후부터 2022년 3월 현재까지 1년간 델파이의 추가 변경 사항은 아래 링크 참조

 

spacer.png

구. "Support Library" 라이브러리에서 새 "AndroidX" 라이브러리로 마이그레이션되었다: https://developer.android.com/jetpack/androidx

 

9 델파이 11에서 안드로이드 12 지원?

옮긴이: 번역일 (2022.3.10) 최신 버전인 델파이 11.3에서는 안드로이드 13을 공식 지원합니다.

10 기존 안드로이드 프로젝트를 업그레이드하기

  • 예전 버전으로 만든 안드로이드 프로젝트 열기
  • 프로젝트(Projects) 창으로 가기
  • 활성화된 타겟 플랫폼으로 Android 32-bit를 선택          
  • Libraries 노드에서 마우스 오른쪽 클릭
  • Revert System Files to Default 선택
  • 써드-파티 라이브러리 등을 커스터마이징
  • Android-64에서도 위 조치를 반복
Android-7.png

비디오에서 이 부분 "기존 안드로이드 프로젝트를 업그레이드하기 데모" 보기

 

델파이 개발자의 안드로이드 도구를 업데이트하기

  • 델파이에서는 추가 선택 설치를 통해 Android SDK 25.2.5과 업데이트를 설치할 수 있다.
  • 경로에 ADB를 추가한다:
    • C\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepositoryAndroidSDK-2525-22.0.42600.6491\platform-tools
  • 경로에 SDKManager를 추가한다:
    • C\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.42600.6491\toolsbin
  • 실행한다
    • adb kill-server
    • SDKManager —update
    • adb version
  • “.android/repositories.cfg could not be loaded.”에러가 발생하는 경우,
    • 사용자의 디렉토리에 .android 폴더가 있는 지 확인한다
    • 빈 repositories.cfg 파일을 생성한다
  • 최신 버전 (2022년 현재)
    • Android Debug Bridge version 1.0.41
    • Version 32.0.0-8006631

12 무선 디버깅

  • 안드로이드 11 (API 30)에서 추가됨
  • 안드로이드 장비에서 개발자 모드로 들어간다("빌드 번호"를 7번 탭한다)
  • 무선 디버깅을 활성화한다
    • 개발자 옵션 -> 무선 디버깅
    • 페어링 코드로 기기 페어링을 탭한다.
    • "이 네트워크에서 항상 허용하기"를 체크하고 확인 창이 뜨면 "허용"을 누른다
  • 윈도우 CMD(명령창)에서
    • adb start-server
    • adb pair [ip]:[port] (from pairing dialog)
    • [페어링 코드]
    • adb connect [ip]:[port] (무선 디버깅 화면에 있는 값)
  • 델파이 IDE에서 장비 새로고침 실행

비디오에서 이 부분 "무선 디버깅 데모" 보기

 

13 안드로이드 앱 번들(App Bundle) 포맷

이 포맷은 구글 플레이에서 Dynamic Delivery application servicing model을 사용하여 각 장비에 최적화된 APK를 만들 수 있도록 한다.

  • Project > Options > Building > Delphi Compiler > Compiling
  • Generate Android App Bundle file (arm + arm64)

앱 번들(App Bundle) 생성에 성공하면, 델파이 IDE은 대화창을 띄워서 해당 .aab 파일 경로를 알려준다.

알아둘 점: 앱 번들(App Bundle)은 개발자가 실행하거나 디버깅할 수 었다. 해당 애플리케이션을 디버깅하려면 .APK 패키지 포맷을 사용해야 한다.

Android-8.png

https://docwiki.embarcadero.com/RADStudio/en/Submitting_Your_Android_App_to_Google_Play#Android_App_Bundle_Support 

 

14 안드로이드의 새 런타임(Runtime) 권한(Permission) 모델

  • 안드로이드 6.0 (API 23) Marshmallow에서 도입됨
    • 지원 라이브러리는 그 이전 안드로이드 버전들을 커버함
  • 새 모델은 자동-업데이트 절차를 간소화한다
    • 최초 사용 시 권한(Permission)승인
    • 설치 시에 모든 권한을 승인하는 방식이 아니다
  • 권한 제어를 최종 사용자가 더 많이 할 수 있게 되었다
    • 각 앱 별로 개별 권한을 승인 또는 거부할 수 있으며, 이후에 변경할 수도 있다
  • 안드로이드의 새 API 메소드인 checkSelfPermission()requestPermissions()를 통해 관리한다.

더 많은 내용: https://developer.android.com/training/permissions/requesting 

15 예전 권한 승인(Permissions Approval) 대화창

  • 설치 중에 모든 권한 수락
  • 사용자는 개별 권한 거부 불가
  • 모든 권한이 매니페스트(manifest) 안에 공개됨
  • 권한이 변경되면, 업데이트 전에 승인을 받아야 함     
Android-9.png

 

16 새 권한 승인(Permissions Approval) 대화창 

  • 사용자는 개별 권한을 처음 요청받을 때 허용 또는 거부를 할 수 있다.
  • 사용자가 일단 거부한 경우, 그 앱에서 다시 권한을 요청하지 못하도록 할 수 있다.    
  • 언제 그리고 어떻게 권한을 요청할 것인지가 중요하다 (뒤에서 추가 설명)
  • 모든 권한은 여전히 매니페스트(manifest) 안에 공개됨
Android-10.png

 

17 사용자들은 이제 세분화된 권한 제어(Permission Control)를 가진다

spacer.png

18 위험한 권한 vs 일반 권한

  • 일반 권한은 사용자에게 요청이 가지 않는다
    • 예: 인터넷, 진동, 블루투스 등
  • 위험한 권한은 사용자가 반드시 승인하도록 되어 있다.
    • 개인정보, 비용 발생 가능성 등이 전형적으로 여기에 해당한다.
    • 이 권한들은 해당 권한 그룹 안에 모여있다
      • Calendar, Call_Log, Camera, Contacts, Location, Microphone, Phone, Sensors, SMS, Storage
    • 사용자는 그룹을 통째로 승인한다
      • 예를 들어 SMS 보내기와 받기
  • 여전히 개발자는 필요한 안드로이드 OS의 모든 권한을 매니페스트(manifest) 안에 넣어서 선언하고 요청해야 한다. 

더 많은 내용: https://developer.android.com/guide/topics/permissions/overview 

19 권한(Permission) 요청 방법 - 델파이

spacer.png

개발자는 필요한 권한을 프로젝트의 속성에서 지정해 주어야 한다. 그러면, 필요한 권한들이 만들어진 앱의 매니페스트에 들어간다.

더 많은 내용: https://docwiki.embarcadero.com/RADStudio/en/Android_Permission_Model 

20 델파이의 권한 서비스 (Permission Service)

21 IsPermissionGranted 메소드

  • System.Permissions.TPermissionsService의 멤버 메소드
    • function IsPermissionGranted(const APermission: string): Boolean;
  • 앱에서 권한이 현재 허용되었는 지를 알아낸다
    • 여전히 허용되고 있다고 절대로 가정하지 말자
  • 검사를 실제로 수행하도록 구현된 플랫폼 권한 서비스가 없는 경우, 기본적으로 모든 권한이 부여되었다고 응답한다.

22 IsEveryPermissionGranted 메소드

23 RequestPermissions

  • System.Permissions.TPermissionsService의 멤버 메소드
  • procedure RequestPermissions(
    const APermissions: TArray<string>;
    const AOnRequestPermissionsResult:
    TRequestPermissionsResult[Event|Proc];
    AOnDisplayRationale: TDisplayRationale[Event|Proc] = nil);
  • 하나 또는 그 이상의 권한(permission)을 요청
  • 현재 허용된 상태가 아닌 권한 모두를 요청
  • 이미 거부된 권한을 다시 요청하는 경우, 그 권한에 대한 근거 문자열이 설정되어 있어서 이전에 근거 표시 루틴이 전달된 경우 그 근거가 사용자에게 사전에 표시될 수 있다.

docwiki:Libraries/System.Permissions.TPermissionsService.RequestPermissions

24 TRequestPermissionsResult[Event|Proc]

25 권한(Permission)을 언제 요청하는가

  • 권한을 알맞은 때 알맞은 방법으로 요청하면 사용자는 더 잘 승인한다
  • 해당 앱에서 요청하는 권한이 왜 필요한지 사용자가 명확히 알 수 없다면, 권한 요청을 하기 전에 왜 필요한 지를 설명한다.
  • 권한 요청을 처음 했을 때 사용자가 거부한다면, 왜 필요한 지를 설명한다.
  • 모든 권한을 한번에 요청하지 말라.
Android-11-5541305.png

 

26 중대한 권한(Critical Permission)을 언제 요청하는가

  • 귀하의 앱 기능에서 중대한 (Critical) 권한인 경우, 앱이 처음 시작할 때 요청한다
  • 그 권한이 꼭 필요한 이유가 명확하다면, 바로 사용자에게 요청한다
    • : SMS(문자 메시지) 앱
  • 그 권한이 꼭 필요한 이유가 명확하지 않다면, 사용자에게 알려준다.
    • 예: 노트 기록 앱에서 노트가 기록된 위치를 저장하는 경우
    • 사용자가 처음 그 앱을 실행할 때 환영 메시지를 제시하면서, 해당 내용을 알려준다.
  • 부수적인 권한이라면, 바로 요청하지 않고 기다린다!
Android-12-6122915.png

 

27 부수적인 권한(Secondary Permission)을 언제 요청하는가

  • 사용자가 앱을 사용할 때 해당 권한이 필요할 수 있고 그렇지 않을 수도 있는 기능에 필요한 권한
    • 이런 경우, 사용자가 해당 작동을 하는 시점에 권한을 요청한다
    • : 사진 찍기, 공유하기, 등
  • 그 권한이 꼭 필요한 이유가 명확하지 않다면, 사용자에게 권한을 요청하기 전에 먼저 알려준다.
    • 예: 먼저 해당 기능과 필요한 권한을 설명하는 내용을 설명하는 대화창을 제공한 후에 권한을 요청한다.
  • 이와 같이 부수적인 권한을 필요할 때 요청하면, 사용자가 앱을 처음 실행할 때 너무 많은 권한을 승인하게 하는 압박을 줄일 수 있다.
Android-13.png

 

28 가장 좋은 적용 방법 기타

29 추가 정보

30 다음 단계

이 댓글 링크
다른 사이트에 공유하기

  • Kori changed the title to 안드로이드 최신 버전(11, 12 등) 개발을 할 때 델파이 11 알렉산드리아를 사용하는 방법과 기본 지식들
  • Kori featured and pinned this 토픽(기고/질문)
  • Kori unpinned this 토픽(기고/질문)

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.