AIDEGen은 Android Framework 코드를 Android Studio, Eclipse와 같은 IDE에서 작업할 수 있도록 도와줍니다.
AIDEGen 툴은 AOSP 소스에 포함되어있으며, IDE에서 개발하고 싶은 모듈에 대해서 AIDEGen으로 프로젝트 파일들을 생성합니다.
AIDEGen에 대한 자세한 소개는 AOSP - AIDEGen에서 확인할 수 있습니다.
이 글에서는 aidgen을 사용하여 프로젝트 파일을 만들고, 안드로이드 스튜디오에서 개발하는 과정을 소개합니다.
aidegen 빌드
aidegen은 안드로이드 프레임워크 코드를 IDE의 프로젝트로 만들어주는 툴이기 때문에 AOSP 코드를 다운로드 받아야 합니다.
aidgen을 사용하려면 먼저 아래와 같이 AOSP 빌드 설정을 합니다.
$ source build/envsetup.sh
$ lunch aosp_x86_64-eng
그리고 전체 빌드를 하거나, 아래와 같이 aidegen을 빌드합니다.
$ m aidegen
aidegen의 help 명령어를 통해 어떻게 사용하는지 알 수 있습니다.
$ aidegen -h
usage: aidegen [module_name1 module_name2... project_path1 project_path2...]
AIDEgen
This CLI generates project files for using in IntelliJ, such as:
- iml
- .idea/compiler.xml
- .idea/misc.xml
- .idea/modules.xml
- .idea/vcs.xml
- .idea/.name
- .idea/copyright/Apache_2.xml
- .idea/copyright/progiles_settings.xml
- Sample usage:
- Change directory to AOSP root first.
$ cd /user/home/aosp/
- Generating project files under packages/apps/Settings folder.
$ aidegen packages/apps/Settings
or
$ aidegen Settings
or
$ cd packages/apps/Settings;aidegen
positional arguments:
targets Android module name or path.e.g. Settings or packages/apps/Settings
optional arguments:
-h, --help show this help message and exit
-d {0,1,2,3,4,5,6,7,8,9}, --depth {0,1,2,3,4,5,6,7,8,9}
The depth of module referenced by source.
-v, --verbose Display DEBUG level logging.
-i IDE, --ide IDE Launch IDE type, j: IntelliJ, s: Android Studio, e: Eclipse, c: CLion.
-p IDE_INSTALLED_PATH, --ide-path IDE_INSTALLED_PATH
IDE installed path.
-n, --no_launch Do not launch IDE.
-r, --config-reset Reset all saved configurations, e.g., preferred IDE version.
-s, --skip-build Skip building jars or modules that create java files in build time, e.g. R/AIDL/Logtags.
-a, --android-tree Generate whole Android source tree project file for IDE.
-e [EXCLUDE_PATHS [EXCLUDE_PATHS ...]], --exclude-paths [EXCLUDE_PATHS [EXCLUDE_PATHS ...]]
Exclude the directories in IDE.
IDE 프로젝트 파일 생성
이제 AIDGen으로 services 모듈의 Android Studio 프로젝트 파일을 생성할 것입니다.
다음과 같은 명령어로 프로젝트 파일을 생성할 수 있습니다.
android$ aidegen -n -p frameworks/base/services -i s -s
-p
: 모듈의 패스를 설정하는 옵션-i s
: 안드로이드 스튜디오의 프로젝트 파일을 만들겠다는 의미-s
: 빌드를 skip하는 옵션-n
: 프로젝트 파일 생성 후, 자동으로 IDE를 실행시키지 않겠다는 옵션(직접 IDE를 실행시킨다면 이 옵션을 사용할 수 있습니다.)
위 명령어를 수행하면, 다음과 같이 출력되며 프로젝트 파일이 생성됩니다.
==================
Notice:
We collect anonymous usage statistics in accordance with our Content Licenses (https://source.android.com/setup/start/licenses), Contributor License Agreement (https://opensource.google.com/docs/cla/), Privacy Policy (https://policies.google.com/privacy) and Terms of Service (https://policies.google.com/terms).
==================
....
frameworks/rs/tests/java_api/CannyLive/Android.mk
frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlay/Android.mk
cts/tests/netlegacy22.api/Android.mk
-i 옵션으로 원하는 IDE를 설정합니다. 다음을 참고하시어 IDE를 설정하시면 됩니다. (j: IntelliJ, s: Android Studio, e: Eclipse, c: CLion, v: VisualStudioCode)
IDE 프로젝트 실행
AIDEGen을 이용하여 frameworks/base/services
모듈의 Android Studio 프로젝트를 생성하였습니다.
Android Studio에서 [File]->[Open]
을 눌러 프로젝트를 실행합니다. services
폴더를 보면 Android project를 의미하는 아이콘이 보입니다.
프로젝트를 열면 다음과 같은 화면이 보입니다. Framework 코드를 IDE에서 작업하면 좋은 점은 다음과 같이 메소드에 대한 정보를 쉽게 볼 수 있다는 점입니다.
또한, 다음과 같이 코드를 구현할 때 사용 가능한 public 메소드 및 필드를 쉽게 찾을 수 있습니다. 메소드의 인자와 인자 개수까지 보여주니 에디터에서 개발하는 것보다 훨씬 편리합니다.
그리고 IDE가 Syntax 체크까지 해주기 때문에 컴파일 전에 문법 오류가 있는지 확인할 수 있습니다.
단점
services 모듈은 코드가 많다보니 조금 느린 것이 단점입니다. 16Core CPU에서 개발하면 빠를까요...? 사용해보신분 있으시면 알려주세요.
Settings와 같이 코드가 적은 패키지는 느리지 않습니다.
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력