2007 2013 Kandroid
58기 안드로이드 개발자 교육 III (2013.6.10 ~ 6.14)
www.kandroid.org »
안드로이드 개발자 교육 I,II,III - 질의 및 응답 
에뮬레이터에 SHARED Library 포함
작성자 Jaynux
작성일 2012-05-17 (목) 02:15
ㆍ추천: 0  ㆍ조회: 7343      
IP: 168.xxx.137
안녕하세요 들플님
 
다름이 아니라 제가
 
google API를 사용하는 App의 경우 AOSP source code를 이용해서 컴파일한 이미지로 실행한
 
에뮬레이터의 경우 INSTALL_FAILED_MISSING_SHARED_LIBRARY라고 뜨면서 설치가 안되서요.
 
당연히 add-on으로 설치되어진 에뮬레이터에서는 정상적으로 실행이 잘 됩니다.
 
그래서 제가 AOSP로 컴파일한 system.img, userdata.img ramdisk.img 이 3개를
 
addon_google_apis_google_inc_10 디렉터리에 넣어서도 해봤지만 역시나
 
INSTALL_FAILED_MISSING_SHARED_LIBRARY 에러가 나오더라고요.
 
그러던 중 들플님께서 제작하신
 
addon_google_apis_by_kandroid_8를 받아서 이 에뮬레이터에 해당 apk를 설치해보니
 
success라고 메시지가 나왔습니다.
 
물론 apk를 열어서 그곳에 .jar 파일을 넣어서 설치해도 되겠지만, 제가 꼭 에뮬레이터에서 바로 되게 해야되서요.
 
들플님께서 제작하신 에뮬레이터는 google api를 포함하고 있는 형태인것 같은데
 
AOSP source 코드에 뭘 추가해서 컴파일한 다음에 이미지를 생성하면
 
INSTALL_FAILED_MISSING_SHARED_LIBRARY 에러를 발생 시키지않고 정상적으로 설치 할 수 있을지 알고싶습니다. ㅠ
 
답변 부탁드립니다.
 
감사합니다.
이름아이콘 들풀
2012-05-17 02:37
addon_google_apis_by_kandroid_8에는 구글 GMS가 포함되어 있어서,
INSTALL_FAILED_MISSING_SHARED_LIBRARY 에러를 피하실 수 있었을 겁니다.
INSTALL_FAILED_MISSING_SHARED_LIBRARY 에러를 없애기 위해서는,
에뮬레이터에 Google GMS 전부는 아니더라도 최소한으로 다음과 같은 두개의 파일이
에뮬레이터에 포함되어 있어야 할 것 같습니다.
---
/system/framework/com.google.android.maps.jar
/system/etc/permissions/com.google.android.maps.xml
---
위의 두개의 파일은 GMS의 일부 파일입니다.
구하는 방법은, 1) 구글과 GMS 사용계약을 했다면 공식적으로 얻으시면 되구요..
아니라면, 2) 타겟디바이스를 루팅해서 해당 파일을 추출하고 jar 파일은 deodexing을 통해
얻으시거나, 3) froyo 버전도 괜찮다면, addon_google_apis_by_kandroid_8의
system.img를unyaffs 를 통해 decoding하시면 해당 파일을 구하실 수 있을 겁니다.
   
이름아이콘 Jaynux
2012-05-17 15:42
안녕하세요 들플님 답변 매우 감사드립니다.

제가 GalaxyS 2.3.3(m110s)에서 말씀하신 2개의 파일
/system/framework/com.google.android.maps.jar
/system/etc/permissions/com.google.android.maps.xml
가져온 다음

adb push system/etc/permissions/com.google.android.maps.xml /system/etc/permissions
adb push system/framework/com.google.android.maps.jar /system/framework
위 명령어를 써서 NexusOne (Cyanogen Mod7)에 넣어서 해보니

더이상 INSTALL_FAILED_MISSING_SHARED_LIBRARY이 안뜨고 Map관련 어플리 정상적으로
설치가 되었습니다.

다만 이제 Emulator에서 하려고하니
System 디렉터리가 Read Only Filesystem이라는 에러가 나와서
adb remount를 하고 다시 시도하니
이번에는 out of memory에러가 나서요.

검색을 해보니 adb push로 집어넣으면 된다고 해서 그렇게 하고 있는데 잘 안되내요.
혹시 adb psuh로 하는 것이 아니라, 컴파일 단계에서 추가해야하는 그런것인가요?

--------------------------------
이번일을 하다보니 unyaffs로 올려주신 KT nexus One system.img를 열어보니
안에 Vending.apk가 있어서 Nexus One cyanogen MOD7에 설치를 해보았습니다.
설치는되는데 실행하면 바로 꺼져버리더라고요.
이게 컴파일 단계에서 뭘 더 추가 시켜줘야 하는것인가요?
들풀 Emulator에서 out of memory가 나는 이유는 잘 모르겠습다만..
제가 이전에 할 때는 system.img를 새로 빌드해서 했던 것입니다.
unyaffs가 system.img를 unpacking하는 툴이라면,
mkyaffs2image라는 system.img packing 툴을 사용해서
간단하게 system.img를 새로 빌드할 수 있습니다.
--
그리고 Vending.apk는 그 자체만 설치해서는 실행되지 않습니다.
왜냐하면, 구글 GMS내의 많은 package들이 서로 밀접하게 연관되어
있기 때문입니다. 특히 GoogleServiceFramework.apk 는 모든 apk에
항상 필요합니다.
5/17 19:08
Jaynux 아 그런것이군요. 감사합니다. out of memory문제는 아래 제가 적은 방법으로 해결 했고요.
Vending.apk는 알려주신대로 필요한것들을 추가로 더 해봐야겠내요.
상세한 답변 감사합니다.
5/17 19:18
   
이름아이콘 Jaynux
2012-05-17 18:53
adb push로 해서 해결 했습니다.
$ emulator -avd [your-emulator-name] -partition-size 128 이런식으로 사이즈 잡아주고 에뮬레이터를
실행하니 push가 되더라고요.

그 Market을 설치하기위해 Vending.apk만을 설치하면 안되는거 같은데.. 컴파일을 다시 해야하는것인지 궁금 합니다.
들풀 다행이네요..-- Vending 문제는 아주 복잡한 문제입니다만..원리는 아래와 같습니다.GMS내의 모든 apk들은 밀접히 연결되어 있기 때문에 GMS 전체를 에뮬레이터에 설치해야 합니다.이를 위해서는 실제 target에서 GMS관련 apk, jar, so, 기타 등등을 추출한 후, 이를 에뮬레이터 이미지에 포함해야 합니다.여기에서 한가지 주의해야할 점은, target에 설치된 apk들이 odex으로 최적화되어 있다는 것입니다.이 odex은 에뮬레이터에서는 실행이 되지 않습니다. 이런 이유로 odex을 dex으로 바꾸는 deodexing작업이 필요합니다. deodexing에는 baksmali, smali란 툴이 사용됩니다.아무튼 꽤 복잡한 작업이 필요합니다.... 5/17 19:18
Jaynux 아 그런것이군요. 교육때 말씀해 주셨던 GMS관련 자료와
Kandroid에 올려주신 GMS글들을 참조해서 하나씩 해봐야 겠습니다.
답변 감사합니다. ^^ 강의 때 평생 A/S로 답변 해주신다고 하셨는데 정말 그러내요 ㅎㅎ 매번 감사 드립니다.
5/17 19:21
   
 
덧글 쓰기 0
32000
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
    N     분류     제목    글쓴이 작성일 조회
83 에뮬레이터에 SHARED Library 포함 [3]+4 Jaynux 2012-05-17 7343
82 안드로이드 의 hidden(@hide) API와 internal(com.android.int.. [3]+2 그로치 2012-04-12 1394
81 Android Debugging 관련 [4] Jaynux 2012-02-05 1370
80 Intent 로 다른 Activity 생성할때 Binder를 통하는 건가요?.. [2] 버스기사 2012-01-16 1092
79 SyncAdapter [3]+1 Jaynux 2011-11-30 827
78 odex format 관련 질문입니다. [2] 보면늦다 2011-11-23 818
77 native activity의 생명주기 문의 [1] 디오니소스 2011-11-22 1169
76 unkillable service에 관한 문의 입니다. [1] objects 2011-11-11 761
75 Android source build [1] Jaynux 2011-11-01 1382
74 Service에서 보조 쓰레드를 통한 background 작업 관련 문의... [1] 영바이 2011-10-12 1449
73 NDK 를 사용하여 native library 만들경우에 대한 문의.. [1] 디오니소스 2011-10-07 1606
72 플랫폼 빌드시 OMXCodec.cpp 에러 [2] beginner2 2011-10-02 1560
71 JNI 관련하여 질문드립니다. [1] 이경택 2011-09-27 1111
70 안녕하세요? Activity 생명주기와 관련해서 질문드립니다... [2]+1 josephseo 2011-09-08 1152
69 프로그램 실행 영역에 대한 질문 [1] 리버티 2011-09-02 763
68 락스크린 관련해서 질문 드렸던 학생입니다 [3]+1 얼음가시 2011-09-01 1583
123456