본문 바로가기

모바일/안드로이드 구조

(10)
안드로이드 프레임워크 : Zygote 보호되어 있는 글입니다.
안드로이드 프레임워크 : JNI와 NDK JNI(Java Native Interface) 안드로이드 프레임워크는 자바와 C/C++ 기반 모듈이 계층별로 구성되어있고, 중간에 매개체 역할을 하는 JNI가 존재한다. 예를들어 GPS 정보를 얻기 위해서는 애플리케이션 프레임워크의 Location Manager가 제공하는 자바 API를 호출하면 되는데, 이때 JNI를 통해 내부 GPS 라이브러리(libgps.so)를 호출하여 GPS 디바이스 드라이버에 접근할 수 있게 된다. Java 클래스에서 C로 작성된 라이브러리의 함수를 호출하거나 C에서 Java 클래스 라이브러리를 사용할 때 JNI를 이용해야 한다. 1. 빠른 속도를 요구하는 루틴 작성 시 C로 작성하고 Java에서 호출한다. C로 작성하면 달빅 VM을 거치지않고 CPU가 직접 실행한다. 2. ..
안드로이드 프레임워크 : init 프로세스 init 프로세스 main() 1. 시그널 핸들러 등록 리눅스 프로세스들은 서로 정보를 교환하기 위해 시그널을 주고 받는다. 각 프로세스는 다른 프로세스에서 발생하는 시그널을 처리하기 위해 시그널 핸들러를 등록한다. init 프로세스는 sigaction() 함수를 통해 자신이 생성한 자식 프로세스가 종료될때 발생하는 SIGCHLD 시그널을 처리할 핸들러를 등록하는데, 이때 등록되는 sigchld_handler는 signal_fd 소켓에 SIGCHLD 시그널이 발생했음을 알리는 핸들러이며 시그널에 대한 실제 처리는 init의 마지막단계인 이벤트처리 루프에서 이뤄진다. static int signal_fd = -1; static void sigchld_handler(int s){ write(signal_fd..
프로세스간 통신 https://androidyongyong.tistory.com/8
Build.prop https://blog.neonkid.xyz/6 Build.prop 주무르기 (삼성 갤럭시S2) ※ 이 내용은 안드로이드 디바이스 내에서도 루팅 (최고 권한 습득)을 필요로 하는 글입니다. 루팅에 대한 지식이 전혀 없으신 분이나 처음 접하시는 분들은 이 포스트에 있는 내용을 절대 따라하지 마세요. 따라.. blog.neonkid.xyz NOX Android 5 /system/build.prop # begin build properties # autogenerated by buildinfo.sh ro.build.id=LYZ28N ro.build.display.id=A5CN51C ro.build.version.incremental=500190710 ro.build.version.sdk=22 ro.build...
안드로이드 프레임워크 : 부팅 프로세스 (1) 리눅스 커널 리눅스 부트로더가 start_kernel() -> init_post() -> run_init_process() 과정을 통해 커널 초기화 후 init 프로세스를 실행시킨다. static int noinline init_post(void){ if (execute_command) { run_init_process(execute_command); } //부팅옵션에서 init= 설정 안한경우 run_init_process("/sbin/init"); run_init_process("/etc/init"); run_init_process("/bin/init"); run_init_process("/bin/sh"); } init_post 함수는 run_init_process 함수를 호출하여 execve..
APK 설치 과정, 실행과정과 DEX, ODEX, OAT 구조 APK 설치과정 마켓이나 외부에서 apk 파일을 다운로드하여 설치하려하면 PackageManager에게 설치요청이 들어오게 되고 설치 프로세스를 실행한다. apk 파일은 /data/app//base.apk 경로에, Native Library 파일은 /data/app//lib/*.so 경로에 복사하고 /data/data/ 디렉터리를 생성하여 앱 실행 중 생성되거나 사용될 데이터를 관리한다. 앱 개발자가 강제추출 방지 옵션(copy protection ON)을 설정했다면 시스템 권한으로만 접근 가능한 /data/app-private/ 디렉터리에 apk파일을 저장하고 /data/app 디렉터리에는 심볼릭 링크를 저장한다. * 사실 보안 상 큰 의미는 없다. 루팅된 기기로는 접근 가능하며 apk 파일을 추출할 ..
APK 빌드 과정 APK 빌드 1. 개발 중 xml파일의 태그들을 이용해 디자인할때 id를 부여하고 java 소스코드 쪽에서는 R.id.xxx 형식으로 참조해서 사용하는데, 빌드 과정에서 aapt가 id값 뿐만 아니라 drawable, layout 등 java에서 접근할 리소스를 파싱하여 각각 정수를 부여한 R.java 클래스를 만든다. (빌드가 끝나면 res폴더에 들어간다.) EditText edtText; edtText = findViewById(R.id.edtText) // findViewById(int) 소스코드에서 R.id.xxx를 참조하면 R클래스에서 정수값을 반환받고 findViewById를 이용해 정수값에 대응하는 객체의 주소를 찾아서 선언해둔 변수에 넣는다. (반환값을 형변환 하는 이유는 컴파일러때문) 2..