안드로이드 부팅 시 작동순서 1. 리눅스 커널 ROM CPU 전원이 인가되면, 지정 번지의 ROM code를 찾아 실행한다. ROM code는 Bootloader를 RAM에 적재시키는 역할을 수행한다. 2. init 프로세스 Bootloader Ram 초기화, HW 초기화, kernel과 Ramdisk를 RAM으로 올린다. 그리고 kernel 시작 지점으로 Jump해서 kernel을 시작시킨다. init 프로세스는 리눅스 커널이 부팅되면 가장 먼저 실행되는 프로세스 중 하나이다. 이 프로세스는 시스템 초기화를 담당하며, 안드로이드 프레임워크 동작에 필요한 각종 데몬, 컨텍스트 매니저, 미디어 서버, Zygote 등을 실행한다. 3. 컨텍스트 매니저 컨텍스트 매니저(Context Manager)가 실행된다..
NDK란? Android에서 NDK를 다음과 같이 정의하고 있다. C 및 C++와 같은 언어를 사용하여 네이티브 코드로 앱의 일부를 구현할 수 있게 하는 도구 모음이다. NDK가 왜 필요한가? Apk개발을 하다가 자신 또는 다른 개발자의 C 및 C++ 라이브러리를 사용해야 하는경우에 유용하다. 또한, 게임이나 머신런닝과 같은 고성능의 계산을 요하는 프로그램들은 Java나 Kotlin으로 만들었 때 결과가 만족스럽지 않을 수 있다. 따라서 C 및 C++ 과 같은 네이티브 코드로 제작이 필요할 때 사용하면 유용하다.
안드로이드에서 사용하는 Java Apk는 원래 가상머신 위에서 동작하였다. 하지만 현재는 이를 대신해 ART(Android RunTime)을 사용한다. 따라서 가상머신이 없어도 가상머신 위에서 동작한다는 점에서 Java의 동작 구조를 띄고있다. 기존에는 주로 Java를 사용하여 앱을 개발하였지만, Google에서 코틀린(Kotlin)을 공식 언어로 채택 후 코틀린을 사용하여 앱을 개발하는 기업이 늘어나고 있다. Kotlin과 Java의 차이 Kotlin과 Java는 100% 호환이 된다. 또한, Kotlin으로 앱을 개발하였을 때와 Java로 개발하였을 때를 비교하면 Kotlin의 코드가 현저히 적다.
JNI(Java Native Interface)란? Java Native Interface는 자바가 다른 언어로 만들어진 Application과 상호 작용할 수 있는 인터페이스를 제공한다. 간단히 말하면 Java와 다른 언어를 연동하는 솔류션이다. 왜 JNI가 필요한가? 바로 Java의 한계를 극복하기 위해 JNI(Java Native Interface)가 필요하다. Java의 한계 Native Code에 비해 느림 하드웨어 제어 낮은 호환성 기존의 시스템과의 연계 문제 사용방법 사용방법은 6단계로 나눈다. 사용방법 1단계 Native Method를 선언하는 Java Class 작성 2단계 1단계에서 작성한 Class Compile 3단계 javah를 사용하여 Native Method가 사용할 Heade..
Compiile이란? Decompile을 알기전에 먼저 Compile에 대하여 알아보자. 컴퓨터는 0과 1로만 모든 명령을 이해하고 실행하기 때문에, 우리가 작성한 문자를 해석하지 못한다. 따라서 우리가 작성한 문자를 컴퓨터가 이해할 수 있는 언어로 바꿔줘야한다. Compile은 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸어주는 과정이다. 이때 사용하는 용어가 "원시코드"와 "목적코드"이다. "원시코드"는 우리가 작성한 코드이고, "목적코드"는 컴퓨터가 이해할 수 있도록 번역한 코드이다.. Decompile이란? Decompile이란 Compile과는 반대로, Compile된 실행 파일을 소스코드로 되돌리는 작업이다. Compile에서 "원시코드"를 컴퓨터가 해석할 수 있게 "목적코드"로..
Apk란? 우선 Apk는 안드로이드에서 플랫폼에서 Application 설치를 위해 배포되는 패키지 파일이다. Apk는 아래와 같은 구성 요소들을 포함하고 있다. AndroidManifest.xml calsses.dex /res META-INF resources.arsc Aptktool 이란? Apktool은 대표적인 Anroid Application 대상의 리버스 엔지니어링 도구이다. Apk파일을 분석하여 디코딩 할 수 있고, 코드를 수정하여 패키징 할 수도 있다. Apk 파일 분석을 위한 디컴파일 방법은 2가지가 있다. 1. dex 파일을 고수준 언어로 디컴파일 하는 방법. 2. Apk파일을 저수준 언어로 디컴파일 하는 방법. 1번 방법은 dex2jar 프로그램을 이용하여 dex 파일을 jar파일로 ..