내 멋대로 안드로이드 - 4

2022. 7. 18. 10:14모바일프로그래밍/안드로이드

728x90

저번 글에서 만들어본 TobeeTest-debug .apk 파일을 에뮬레이터의 리눅스 커널상에서 찾아 보는 것을 실패 했는데요 아무리 생각해도 구글 사람들이 바보가 아닌 다음에야 tmp라는 이름의 디렉토리에서 사용자 애플리케이션을 넣어 두고 서비스를 할 수 있겠느냐는 생각을 누구나 했을 것이라 생각 합니다. 단, 사용자 애플리케이션 비슷한 것들이 이 data 디렉토리에 들어 갈 수도 있겠구나 라는 의심이 들기 시작한 거겠죠 그럼 한 번 data 디렉토리를 살펴보면

 

 

 

 

이 많은 디렉토리 중에서 유독 app라는 디렉토리에 들어 가고 싶다는 생각이 드는 것은 왜일까?

여하튼 들어가 보면

 

 

 

역시나 apk 파일이 존재 하는 군요. 여기서 한가지 말씀 드리자면 실제 디바이스 즉 우리가 거금을 투자해서 산 스마트폰에서도 이런 디렉토리가 존재 한다는 것입니다. 하지만 안타까운 사실은 이 디렉토리에는 접근 하지는 못한다는 것이죠. 여하튼 지금 제가 만든 디렉토리에 들어가 있는 apk의 이름과는 많이 차이가 있는 이름인데

 

 

 

그렇다고 하면 어딘가 이 파일에 대한 설명이 존재 하여야 하는 것은 당연한 이치이고 그게 당연한 이치가 될려면 다시 한번 뒤져보는 수밖에 없으니 디렉토리를 찾다 보면 또 의심스런 디렉토리가 있겠죠 가령 예를 들어 system 같은?

 

 

 

이 디렉토리에 있는 두 개의 xml이 눈에 띄는 데 한번 살펴 보기로 하겠습니다

현재는 ‘장님이 코끼리 다리 만지듯’ 이게 뭔가 저게 뭔가 하는 상황이라서 저도 뭐라 말씀 드릴 말이 없습니다 저번 글에서도 말씀 드렸듯이 순전히 이건 제 생각이고 저 나름의 창작한 것이기 때문에 상상의 나래를 그냥 펼치고 있다고 이해해 주시면 감사 하겠습니다

여하튼 내 파일 시스템으로 받아 보면 다음과 같이 받아 보면

 

 

 

Appwidgets.xml 은 그냥 아무 내용이 없고 packages.xml에 보면 현재 설치된 패키지와 접근 권한 같은 것들이 나오고 있습니다

그 중에서 우리가 생성 시킨 de.vogella…를 찾아 보면

<package name="de.vogella.android.temperature" codePath="/data/app/de.vogella.android.temperature.apk" system="false" ts="1287401214000" version="1" userId="10023">
<sigs count="1">
<cert index="2" key="308201e53082014ea00302010202044b7504a5300d06092a864886f70d01010505003037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f6964204465627567301e170d3130303231323037333530315a170d3131303231323037333530315a3037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f696420446562756730819f300d06092a864886f70d010101050003818d0030818902818100836da483b88dc2361f466efec776fe0a3f1f8420695e1538528fa1670bf0505741e6c1e6d1f0273a49a55531ca16afbdfee0140397a16b512e21ee9ce1d303a243ca58a8cb3197bc2f09552422243f9f543aeb107731579e8f66d5072cacc0b7dd1f267506303d2c8aebcfd8303150fade71ee4ff2165104b11d6d5d3dcadd150203010001300d06092a864886f70d0101050500038181002e8f80ec5ddc2e658927864fdbdb386f5b731a36c5eaa4681fa1bf9c3ebd1d690ae93b0cba78e96921e729a9a424ad5d937f208c99c5a168035e43da3444c8e7265cfcea66fb09e2ef6631f8edff0e28cf266a229cf89d5849c41d2460f1efa54e0a1427c2a6ce3f7f636fe12a15a8f096b3950f58fb84b63bdb3830299681fb" />
</sigs>
<perms>
<item name="android.permission.READ_PHONE_STATE" />
<item name="android.permission.WRITE_EXTERNAL_STORAGE" />
</perms>
</package>

위의 내용에서 유추 할 수 있듯이 package 엘리먼트에 어트리뷰트로 이름, apk위치, system 라이브러리인지 유무, 버전, userId 등이 있을 수 있고

하부 엘리먼트에 sigs 및 perm이 있습니다. 그래서 아주 조심스럽지만 우리가 만든 Tobee_test_debug.apk는 위의 두 파일에 담겨져서 안드로이드 멋대로(^^;;) 사용하고 있는 것이 아닐까 하는 것이지요

 

마지막으로 data/data 디렉토리로 가보면 다음과 같이 우리가 설치한 패키지 이름의 디렉토리가 눈에 띄는 데요 그 하부 디렉토리에는 다시 lib라는 디렉토리가 존재 합니다

 

 

 

 

여기서 유추 해 볼 수 있는 것이 또 있겠지요 뭐냐하면 바로 라이브러리라는 의미 인데(그걸 누가 몰라??) 

자바에서는 라이브러리 형태들이 jar나 zip파일 형식으로 첨부 할 수 있습니다.

물론 자신이 만든 라이브러리가 아니거나 외부라이브러리 등등 말이죠

그리고 하나 더  소위 JNI(JINI말고) 라는 Java Native Interface라고 해서 레거시라고 말하는 자바라는 언어 이외의 언어를 (뭐 여기서는 C/C++뿐이겠지만)를 접근 할 수 있는 방식을 제공하고 있죠.

 

물론 아시다시피 이런 “라이브러리 경로” 라는 문제를 해결하기가 여간 까다로운 문제가 아니죠.

특히나 서버 프로그래밍이나 분산환경을 사용하는 경우에는 특히나 이런 문제에 봉착합니다 “도대체 어디에 갖다 놔야 클래스를 볼 수 있을까?” 라는 문제이죠.

 

안드로이드는 이런 식으로 data라는 디렉토리 밑에서 이 문제들을 해결하고 있는 것으로 보입니다

가령 두 가지 예를 들어 본다면 이런 것이겠죠.

 

첫째, 순수 자바라이브러리인 경우 : 위에서 말씀 드렸듯이 jar나 zip의 압축파일로 이루어져 있을 것입니다. 

가장 대표적인 예가 classes12.zip이겠지요…아는 사람만 안다는 오라클이 제공하는 jdbc 드라이버 입니다. 

안드로이드가 표준으로 제공해주지 않는 라이브러리 이므로 이 라이브러리 파일은 어쨌거나 classpath라는 변수에 위치가 저장이 되어야 합니다

 

둘째, JNI 라이브러리 : 멋지고 아름다운 C/C++라이브러리인데 도저히 너무 아름다워서 자바로 바꾸기 아까운 경우(헐!) 이런 lib 디렉토리에 넣지 않을까 하는 생각이 드네요

 

그럼 어떻게 넣는냐 그리고 진짜 넣으면 이 디렉토리들에 들어 가는 것이냐라는 부분은 아직 안해봐서 미정입니다만…..그렇지 않을까 하는 생각이 드는 것은 어쩐 일일까요?

 

여하튼 위의 두 가지 예를 가지고 다음 번에는 안드로이드에서 어떻게 처리하는 지 알아보도록 하겠습니다.

728x90