Dplex

Dplex.egloos.com

포토로그


시계

통계 위젯 (화이트)

13
43
108271


전용 SDK 만들기 - JAVA API 추가 안드로이드 포팅

전용 SDK는 기존의 SDK에 자신이 추가하고 싶은 라이브러리를 넣어서 자신이 사용하기 쉽게 만드는 SDK 입니다..즉 이클립스에서 android.jar를 참조할때 자신이 만든 SDK를 이용하여 자신의 android.jar 파일을 만드는 것이죠..그럼 android.jar는 어떻게 만들어 질까요??
이 폴더를 리눅스에서 make하면 해당 폴더내의 java 파일들이 컴파일 되어 android.jar 파일로 묶인답니다.~!예를 들어 우리가 흔히 쓰는 Toast 클래스를 찾아보겠습니다..
Toast.java는 src/frameworks/base/core/java/android/widget 폴더내에 있는걸 확인할 수 있습니다.Toast.java를 들여다 보면...
우리가 자주 사용하는 makeText 메서드가 자바코드로 구현되어 있는 걸 확인할 수 있습니다..

Toast.makeText(getBaseContext(),"text",Toast.LENGTH_LONG).show();

 

자바에서 이런식으로 자주 사용합니다.. 실제로 우린 "text" 내용만 바꾸고 나머진 그대로 쓰는데...이게 너무 귀찮아서 한번 바꿔보았습니다....ㅎ
Toast.java의 Toast 클래스 내에서 위와같이 함수를 넣었습니다.단순히 함수만 제가 한번 만들어 보았습니다.. 실제로 저 함수를 넣으면 되는지 확인해 봐야겠죠;;ㅎ저는 지금 sdk를 만들고 있는 과정입니다....
여기 보시면 howto_build_SDK.txt 파일이 있습니다.. 이 파일을 보고서 맹글었습니다.. 그럼 따라해보겠습니다...1. lunch sdk-eng2. make sdk이런식으로 하라고 되어 있습니다..하지만 but, 저런식으로 하면 쭉 하다가 에러가 발생합니다..에러를 스샷하진 못했지만 current-api not compatible 머 이런식으로 api가 맞지 않다고 나옵디다...;;;
그럼 어떡해야 하는걸까요..?make sdk를 하기 전에 TARGET_PRODUCT=sdk 로 되어있는걸 확인할수 있고.. 보통은 full-eng  이거나 자신이 빌드할려는 타겟으로 나옵니다..제 경우 crespo로 나옵니다.. (nexus s 는 crespo)make update-api를 해줘야 합니다..
make update-api를 해주면 마지막에 Copying current.txt 라는 문구가 나옵니다..중요중요!!!!!이 current.txt는 무엇일까요..지금부터 리눅스가 아닌 윈도우에서 하겠습니ekekekekek.. VMWare는 아무리 사양이 좋아도 느려터진 감이 있어서;;전 삼바를 이용해서 파일을 공유합니다..
src/frameworks/base/api 폴더내에 current.txt 파일이 있는걸 확인할 수 있습니다...왜 그런진 모르겠는데 api13 까지는 xml 파일이고 14부터는 txt로 만들어져 있습니다..파싱하는 과정이 바뀐걸까요..? 잘 모르겠습니다;;current.txt 파일을 열어보면..
public class Toast 내에 만들어둔 printl과 prints 메서드가 있는 걸 확인할 수 있습니다.. 절대 제가 수정한게 아닙니다.. make update-api로 만들어진 것입니다>~~~~~~~그리고 다시 make sdk를 해주면...
src/out/host/linux-x86/sdk 경로에 자신이 만든 sdk가 만들어 지는걸 알수있습니다..src/out/host/linux-x86/sdk/android-sdk_자신이만든sdk이름_linux-x86/platform/빌드한버전/android.jar 파일이 있는걸 확인할 수 있습니다...ㅎㅎ
네.. 여기까진 뭐.. 그냥 Toast내에 함수만 넣었으니깐 잘된것 같습니다.. 하지만 진짜 원하는건 내가 만든 클래스를 넣는것이겠죠??? 아닌가;;;암튼 전 제가 만든 클래스도 넣어보고 싶었습니다..클래스 넣어봅죠..
전 src/frameworks/base/core/java/android/jhl 폴더를 생성하였습니다..그 폴더내에 Cal.java 파일을 위와같이 만들었습니다...notepad++를 얼른 깔아야겠어요;; 윈8 깐지 얼마 안되서 너무 유틸이 없네요..ㅠ마찬가지로  lunch sdk-engmake update-api를 통하여 current.txt 파일에 해당 내용이 있는 걸 확인하고..
make sdk로 sdk를 만듭니다..이렇게 해서 만들어진 android.jar는 리눅스 상에서는 돌아갑니다..하지만 이렇게 만들어진 linux-x86 폴더내에 있는 건 리눅스 상에서만 돌아갑니다(아마도???)윈도우에서 사용하기 위해서는... (궂이 윈도우에서 사용안해도 된다고 하면 여기까지만... 전 리눅스를 잘 몰라서..;; 라기 보단 윈도우가 그냥 편하니깐...요;;) make win_sdk를 한번더 수행해야 합니다..인내심을 가지고 기다리다 보면..아 그리고 VMWare 컴파일 속도와 Native 우분투 컴파일 속도차이가 너무 심하게 나던데.. 왜 그런진 몰겠네요;;참고로 VMWare 램 4기가 주고, 프로세서 2개 코어2개 해서 4개 프로세서 줬는데도.. 네이티브랑 속도차 많이 나더군요;;;암튼 걍 영화 2편정도 보시면..??
linux-x86이 아닌 windows에 sdk 폴더가 만들어 집니다.. 와우;; 대박~~그럼 위의 파일을 복사해와서 윈도우 이클립스와 연동해보겠습니다..이클립스의 SDK 경로를 복사해온 폴더로 설정한다음..
설정을 하면 자동으로 하나의 타겟이 지정됩니다.. 전 repo manifest 를 4.1.1로 설정해 놓았으므로, 위처럼 4.1.1. 타겟이 생기는걸 확인할수 있습니다.그럼 자동으로 android.jar 파일의 빌드 경로가 추가되는데 혹시 안되면 수동으로 추가하셔도 됩니다...
기존의 sdk 폴더 경로내에 있는 android.jar를 참조할 경우 자신이 복사해온 android.jar 파일을 참조하도록 바꿔주세요~!그리고 android.jar 파일을 살펴보면..
드디어.. 제가 원하던 패키지와 클래스가 라이브러리에 추가 된걸 확인할 수 있습니다..
여기까지 요약;;
1. 자바 라이브러리 작성
2. source build/envsetup.sh
3. lunch sdk-eng
4. make update-api
5. current.txt 확인
6. make sdk
7. make win_sdk  (전 win_sdk만 만들려고 해봤는데 6번 생략하면 make error : 2 발생하더라구요..)

그럼 실제로 간단하게 코딩해보겠습니다..
자바 문법 및 안드로이드 문법은 너무 간단해서 생략하겠습니다;;다들 이정도는 아시니깐요... 머 ㅎ단순히 버튼하나 만들어놓고 클릭리스너로 이벤트 받는 예제입니다..Toast.makeText(.., .., ..).show() 대신 제가 만들어 놓은 prints 함수와클래스로 만들어 놓은 Cal 내의 add 메서드를 호출해 보았습니다...

에뮬레이터 실행화면~!

폰에서 실행화면~!
네 당연히 실제 폰으로 테스트 할려면lunch 에서 자신의 폰 기종을 맞춘뒤에make -j숫자 옵션으로 빌드하신후에flash 하시면 됩니다~!
접기

덧글

댓글 입력 영역