 |
아래의 내용은 안드로이드에 이미 내장된 Application들(APKs)을 Android SDK와 Eclipse 개발환경에서 개발하기 위한 방법입니다. 추후 좀 더 섬세하게 정리하는 것으로 하고, 일단 간단하게 요약해 봅니다. 1. 안드로이드 full source를 받아서 빌드한다. 2. 1. 에서 빌드된 system.img, userdata.img, ramdisk.img를 사용해서 Android Virtual Divice를 새로 빌드한다. 3. 1. 에서 만들어진 아래의 classes.jar를 sdk가 설치된 host 컴퓨터로 가져온다. ---- ./out/target/common/obj/APPS/Mms_intermediates/classes.jar ./out/target/common/obj/APPS/ContactsProvider_intermediates/classes.jar ./out/target/common/obj/APPS/SoundRecorder_intermediates/classes.jar ./out/target/common/obj/APPS/Development_intermediates/classes.jar ./out/target/common/obj/APPS/Gallery_intermediates/classes.jar ./out/target/common/obj/APPS/SpareParts_intermediates/classes.jar ./out/target/common/obj/APPS/CalendarProvider_intermediates/classes.jar ./out/target/common/obj/APPS/MediaProvider_intermediates/classes.jar ./out/target/common/obj/APPS/SkeletonApp_intermediates/classes.jar ./out/target/common/obj/APPS/ApiDemos_intermediates/classes.jar ./out/target/common/obj/APPS/VpnServices_intermediates/classes.jar ./out/target/common/obj/APPS/Browser_intermediates/classes.jar ./out/target/common/obj/APPS/Camera_intermediates/classes.jar ./out/target/common/obj/APPS/TtsService_intermediates/classes.jar ./out/target/common/obj/APPS/AccountAndSyncSettings_intermediates/classes.jar ./out/target/common/obj/APPS/DrmProvider_intermediates/classes.jar ./out/target/common/obj/APPS/CtsTestStubs_intermediates/classes.jar ./out/target/common/obj/APPS/Term_intermediates/classes.jar ./out/target/common/obj/APPS/SettingsProvider_intermediates/classes.jar ./out/target/common/obj/APPS/GoogleSearch_intermediates/classes.jar ./out/target/common/obj/APPS/CertInstaller_intermediates/classes.jar ./out/target/common/obj/APPS/ImfTest_intermediates/classes.jar ./out/target/common/obj/APPS/Phone_intermediates/classes.jar ./out/target/common/obj/APPS/Snake_intermediates/classes.jar ./out/target/common/obj/APPS/PackageInstaller_intermediates/classes.jar ./out/target/common/obj/APPS/HelloActivity_intermediates/classes.jar ./out/target/common/obj/APPS/SignatureTest_intermediates/classes.jar ./out/target/common/obj/APPS/GoogleContactsProvider_intermediates/classes.jar ./out/target/common/obj/APPS/SmokeTestApp_intermediates/classes.jar ./out/target/common/obj/APPS/UserDictionaryProvider_intermediates/classes.jar ./out/target/common/obj/APPS/Launcher_intermediates/classes.jar ./out/target/common/obj/APPS/TelephonyProvider_intermediates/classes.jar ./out/target/common/obj/APPS/Email_intermediates/classes.jar ./out/target/common/obj/APPS/Music_intermediates/classes.jar ./out/target/common/obj/APPS/FrameworkTest_intermediates/classes.jar ./out/target/common/obj/APPS/Settings_intermediates/classes.jar ./out/target/common/obj/APPS/GlobalSearch_intermediates/classes.jar ./out/target/common/obj/APPS/NotePad_intermediates/classes.jar ./out/target/common/obj/APPS/Calculator_intermediates/classes.jar ./out/target/common/obj/APPS/DownloadProvider_intermediates/classes.jar ./out/target/common/obj/APPS/Bluetooth_intermediates/classes.jar ./out/target/common/obj/APPS/LatinIME_intermediates/classes.jar ./out/target/common/obj/APPS/AlarmClock_intermediates/classes.jar ./out/target/common/obj/APPS/PicoTts_intermediates/classes.jar ./out/target/common/obj/APPS/LunarLander_intermediates/classes.jar ./out/target/common/obj/APPS/Contacts_intermediates/classes.jar ./out/target/common/obj/APPS/Calendar_intermediates/classes.jar ./out/target/common/obj/APPS/HTMLViewer_intermediates/classes.jar ./out/target/common/obj/APPS/ApplicationsProvider_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/com.android.inputmethod.pinyin.lib_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/monkey_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/android.policy_phone_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/input_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/pm_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/services_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/android.cts.refapp_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/framework-tests_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/javax.obex_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/android.cts.dpi_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/am_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/svc_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/com.example.android.platform_library_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/bmgr_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/ime_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar ----
4. 더불어 안드로이드 full source에 있는 변경하고자 하는 package소스도 sdk가 있는 host 컴퓨터로 가져온다. 5. Eclipse에서 변경하고자 하는 pakage를 로드한다. 6. 위에서 가져온 classes.jar를 Eclipse에서 add-library를 통해 user lib로 추가한다. 기본적으로 아래의 두개 classes.jar를 추가한후, 필요하면 더 위의 list중에서 몇개를 더 추가한다. ----- ./out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar ./out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar -----
더불어 일부 패키지의 경우엔 추가적으로 아래의 jar파일을 static 하게 링크한다.
-----
./out/target/common/obj/JAVA_LIBRARIES/libgoogleclient_intermediates/javalib.jar ./out/target/common/obj/JAVA_LIBRARIES/google-framework_intermediates/javalib.jar ./out/target/common/obj/JAVA_LIBRARIES/googlelogin-client_intermediates/javalib.jar
------ 위의 3개의 jar에 대한 빌드전 소스코드상의 위치--- ./frameworks/opt/com.google.android/framework.jar ./frameworks/opt/com.google.android.googlelogin/client.jar ./external/googleclient/googleclient-lib.jar
7. Eclipse Java Build Path의 Order and Export에서 6. 에서 추가한 classes.jar를 우선적으로 참조하게 한다. 8. Apk 빌드시 Export Unsigned Application Package로 빌드한다. 9. 다음과 같이 이미 설치된 Apk를 uninstall한다. ----- > adb shell > mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system > rm /system/app/<apk_filename> > pm uninstall <package_name> 10. 8. 에서 만들었던 Unsigned Application Package에 다음과 같은 방식으로 Signing을 한다. 아래에서 사용된 signapk.jar와 testkey.x509.pem, testkey.pk8은 안드로이드 full source내에 있습니다. --- SIGNAPK_JAR=$TOP/out/host/linux-x86/framework/signapk.jar PRIVATE_CERTIFICATE=$TOP/target/product/security/testkey.x509.pem PRIVATE_PRIVATE_KEY=$TOP/target/product/security/testkey.pk8
java -jar $SIGNAPK_JAR $PRIVATE_CERTIFICATE $PRIVATE_PRIVATE_KEY (your)-unsigned.apk (your)-singed.apk
ex). > cd eclair > java -jar ./out/host/linux-x86/framework/signapk.jar ./build/target/product/security/testkey.x509.pem ./build/target/product/security/testkey.pk8 (your)-unsigned.apk (your)-singed.apk 11. 10. 에서 만들어진 Apk를 install한 후, 실행해 본다. ---- > adb install (your)-signed.apk
ex) Launcher Package의 경우엔, 아래와 같은 절차로 uninstall, install을 하시면 될 듯 합니다. - uninstall > adb shell > rm /system/app/Launcher.apk > pm uninstall com.android.launcher - install > adb install Launcher.apk > adb shell > kill <android.process.acore_pid> | |
아반티
2010-04-29 11:40
|
Music Player 쪽으로 위 과정을 실행했는데요, 7번과정까지 해서 다른 error는 모두 수정을 했는데, 아래와 같은 에러 하나가 남아서 도저히 고칠 수가 없네요;;; 버전은 2.1이입니다. 조언 좀 부탁드립니다.
[2010-04-29 11:15:48 - Music_Android]
trouble processing "java/io/FilterReader.class":
[2010-04-29 11:15:48 - Music_Android]
Attempt to include a core class (java.* or javax.*) in something other
than a core library. It is likely that you have attempted to include
in an application the core library (or a part thereof) from a desktop
virtual machine. This will most assuredly not work. At a minimum, it
jeopardizes the compatibility of your app with future versions of the
platform. It is also often of questionable legality.
If you really intend to build a core library -- which is only
appropriate as part of creating a full virtual machine distribution,
as opposed to compiling an application -- then use the
"--core-library" option to suppress this error message.
If you go ahead and use "--core-library" but are in fact building an
application, then be forewarned that your application will still fail
to build or run, at some point. Please be prepared for angry customers
who find, for example, that your application ceases to function once
they upgrade their operating system. You will be to blame for this
problem.
If you are legitimately using some code that happens to be in a core
package, then the easiest safe alternative you have is to repackage
that code. That is, move the classes in question into your own package
namespace. This means that they will never be in conflict with core
system classes. If you find that you cannot do this, then that is an
indication that the path you are on will ultimately lead to pain,
suffering, grief, and lamentation.
[2010-04-29 11:15:48 - Music_Android] 1 error; aborting
[2010-04-29 11:15:48 - Music_Android] Conversion to Dalvik format failed with error 1 |
|
|
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
50
|