2008 2010 Korea Android
Open Access (Open Devices,Open Applications,Open Services,Open Networks)
www.kandroid.org »
Android Open Source 
▶ HTC Android Kernel Open Source
▶ Samsung Android Kernel Open Source
▶ Motorola Android Kernel(+α) Open Source
안드로이드 내장 APKs 개발방법(초안)
작성자 들풀
작성일 2010-03-05 (금) 17:31
ㆍ추천: 9  ㆍ조회: 13143      
IP: 221.xxx.215
아래의 내용은 안드로이드에 이미 내장된 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-03-06 12:03
많은 도움이 될듯 합니다. 감사합니다 ^^
   
이름아이콘 신쇼
2010-03-06 16:48
이 초안을 기초로해서 이후로, 각각에 대한 자세한 방법을 알려주신다는 거지요??
감사합니다(^^)
들풀 아마도 자세한 방법과 원리, 좀 더 편리한 개발환경 등이 보강되면 좋겠다고 생각하고 있습니다. 3/6 16:54
   
이름아이콘 김동주
2010-03-07 18:02
APPS/*/classes.jar는 어디에 쓸까요?
필요없을거 같은데.. ^^
빌트인 App을 만들거면 Eclipse로는 편집 및 컴파일에러 확인 정도만 하시고
풀소스(리눅스) 에서 빌드하심이 나을듯합니다.
빌드환경이 서로 달라 컴파일 에러 및 오동작하는 경우가 있습니다.
들풀 오랜만이네요..잘 지내시죠?
APPS/*/classes.jar가 가끔 필요한 package들이 있더군요..~
예를들어, Calculator 같은 곳에선 필요하더군요..~
아무튼 좀 더 하나 하나 짚어볼 필요가 있을 것 같긴 합니다.
3/7 18:22
   
이름아이콘 하늘로이드
2010-03-08 09:28
비공개 글입니다.
   
이름아이콘 아야
2010-03-08 11:15
질문좀.. R 클래스가 참조 오류가 나는데요. 이 부분 처리는 어케
해야 할지 모르겠습니다. 자바 프로젝트로 패키지 파일 생성 했구요.
말씀하신 2개의 jar만 참조했습니다.
   
이름아이콘 아야
2010-03-08 11:19
아 Launcher 소스 파일을 생성했습니다.
들풀 축하드립니다..~화이팅..!! 3/8 11:26
   
이름아이콘 아야
2010-03-08 13:13
^^ 감사 그런데 launcher 등 기본 프로그램들이 삭제가 안되네요.
에뮬레이터는 빌드한 이미지로 만들었습니다.
   
이름아이콘 키모토
2010-03-09 14:06
안녕하세요 질문 하나 드리겠습니다. 7번에서 우선 참조가 가능케 했지만, 빌드에서는 에러가 안나오지만, 소스레벨의 에러가 계속 발생을 하네요 .. 그래서 ./out/target/common/obj/JAVA_LIBRARIES/에 있는 *.jar 파일들을 core 라는 유저 라이브러리를 작성하여 모두 add 하였습니다.
그래도 문제가 해결이 안되는것에 대한 답변좀 부탁드리겠습니다.
들풀 작업하셨던 package가 어떤 것인지 기록남겨놓으시면,
추후 검토해 보도록 하겠습니다.
3/9 14:30
키모토 Launcher package 를 작업하였습니다.
폐를 끼치는것은 알고있지만... 부탁드리겠습니다.
3/9 15:04
들풀 본문에 Launcher Package uninstall, install 절차 넣어 두었습니다.
잘 되네요..
3/9 15:38
키모토 ^^ 감사합니다 한번더 시도해봐야겠네요 감사합니다~ 3/9 15:52
들풀 작업하시면서, 위의 본문 내용을 모두 정확하게 이해하시면서 하시면 충분히 가능할겁니다. 3/9 16:00
김동주 signing을 하셨다면 굳이 지우실 필요없이 설치하시면 업그레이드 됩니다. 버전코드는 증가 시켜야 겠죠
3/9 16:06
들풀 오호...동주씨 훌륭하십니다..~~ 3/9 16:11
   
이름아이콘 밝은햇살
2010-03-10 11:44
브라우저의 경우, Eclipse 상에서 컴파일되고 인스톨은 되는데요. 실행하면서 아래와 같은 에러가 납니다. 주로 Resource 들을 찾지 못해서 발생하는 에러들인데요. 해결하기가 쉽지 않습니다. 조언 부탁드립니다.

1. 추가한 jar 파일 목록
"./out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar"
"./out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar"
"./out/target/common/obj/APPS/Browser_intermediates/classes.jar"

2. Logcat
03-10 02:35:34.120: ERROR/AndroidRuntime(225): Uncaught handler: thread main exiting due to uncaught exception
03-10 02:35:34.169: ERROR/AndroidRuntime(225): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.browser/com.android.browser.BrowserActivity}: android.view.InflateException: Binary XML file line #41: Error inflating class <unknown>
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2484)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1835)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.os.Looper.loop(Looper.java:123)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.ActivityThread.main(ActivityThread.java:4325)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at java.lang.reflect.Method.invokeNative(Native Method)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at java.lang.reflect.Method.invoke(Method.java:521)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at dalvik.system.NativeStart.main(Native Method)
03-10 02:35:34.169: ERROR/AndroidRuntime(225): Caused by: android.view.InflateException: Binary XML file line #41: Error inflating class <unknown>
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.createView(LayoutInflater.java:513)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at com.android.browser.TitleBar.<init>(TitleBar.java:70)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at com.android.browser.BrowserActivity.onCreate(BrowserActivity.java:345)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2431)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     ... 11 more
03-10 02:35:34.169: ERROR/AndroidRuntime(225): Caused by: java.lang.reflect.InvocationTargetException
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.widget.LinearLayout.<init>(LinearLayout.java:92)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at java.lang.reflect.Constructor.constructNative(Native Method)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.LayoutInflater.createView(LayoutInflater.java:500)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     ... 22 more
03-10 02:35:34.169: ERROR/AndroidRuntime(225): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/title_text.xml from drawable resource ID #0x7f02003a
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.content.res.Resources.loadDrawable(Resources.java:1693)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.View.<init>(View.java:1850)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.View.<init>(View.java:1799)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.view.ViewGroup.<init>(ViewGroup.java:284)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     ... 26 more
03-10 02:35:34.169: ERROR/AndroidRuntime(225): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x108030d
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.content.res.Resources.getValue(Resources.java:891)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.content.res.Resources.getDrawable(Resources.java:579)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:160)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     at android.content.res.Resources.loadDrawable(Resources.java:1690)
03-10 02:35:34.169: ERROR/AndroidRuntime(225):     ... 30 more
들풀 일단, 체크해 볼만한 것은 브라우저에는 android:sharedUserId="android.uid.shared" 가 없기 때문에 Signing 방식이 좀 다를 듯합니다. 추후 한번 검토해 보겠습니다. 3/10 12:07
들풀 static jar와 media key를 사용해서 signing하는 것이 필요할 듯..~ 5/1 02:19
   
이름아이콘 옴메
2010-03-24 10:06
루팅안된 단말에서는 불가능하겠죠??
   
이름아이콘 vega
2010-04-05 14:45
10번 과정에서 Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE] 라고 나오면서 더 이상의 진행이 안되네요,, 혹시 이 문제 아시는분 있으신가요? (참고로 camera / gallery app 등으로 진행 해 봤습니다.)
   
이름아이콘 vega
2010-04-05 16:38
《Re》vega 님 ,
서명용 test key 를 잘못 선택 했었네요, 문제 해결 했습니다.
감사합니다.
수중돌고래 안녕하세요.
저도 10번 과정중 동일한 문제가 발생되었는데..
서명용 tesk key 어떤것인지 ?
어떻게 문제 해결을 하셨는지 좀 가르쳐 주세요.
감사합니다.
4/12 11:12
   
이름아이콘 아반티
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
   
이름아이콘 주황바지
2010-04-30 12:09
아 많은 도움이 됐습니다. 전 2.1 Launcher를 가져와서 하는데요 실행은 잘되는데요.. 화면이 이상하게 나와서요 배경화면은 작아지고 다른 버튼이라 이런 이미지들은 커졌네요.. 픽세값으로 픽스되어있는 값인데요.. 1.6때랑 2.1때랑 싸이즈 차이가 나는데 어떤 문제가 있는 것일까요??
   
이름아이콘 씨앗
2010-05-07 09:19
wow!! 정말 놀랍네요!! 감사합니다 들풀님!!! :D
   
이름아이콘 포크맨
2010-05-20 11:30
좋은 글 감사합니다.
   
이름아이콘 허쒸
2010-06-10 10:50
10번 과정에서  testkey.x509.pem, testkey.pk8는 단말제조사에서 생성을 하게 되는 것이라 모든 단말에서 동작한다고 보장할 수는 없을 거 같은데요.
들풀 네....맞는 이야기입니다..~ 6/10 10:55
   
이름아이콘 김준태
2010-06-15 14:23
10번까지 다하고 마지막 11번 인스톨을 하는데서
Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
이라고하면서 안되네요.. 2.1버전입니다
   
이름아이콘 더글라스
2010-06-21 18:37
위의 10번과정중에 아래와 같이 에러가 발생하는데요 어찌되는거죠?

Z:paulpaul.lee_view5AND>java -jar ./out/host/linux-x86/framework/signapk.jar
./build/target/product/security/testkey.x509.pem   ./build/target/product/secur
ity/testkey.pk8 AlarmClock.apk AlarmClock.apk
java.util.zip.ZipException: error in opening zip file
       at java.util.zip.ZipFile.open(Native Method)
       at java.util.zip.ZipFile.<init>(ZipFile.java:114)
       at java.util.jar.JarFile.<init>(JarFile.java:135)
       at java.util.jar.JarFile.<init>(JarFile.java:114)
       at com.android.signapk.SignApk.main(SignApk.java:437)
   
이름아이콘 더글라스
2010-06-21 20:26
들풀님
10번과정에서 아래와 같은 에러가 발생하는데요. 왜그런거죠?


Z:paulpaul.lee_view5AND>java -jar ./out/host/linux-x86/framework/signapk.jar
./build/target/product/security/testkey.x509.pem   ./build/target/product/secur
ity/testkey.pk8 Calculator.apk Calculator.apk
Exception in thread "main" java.util.zip.ZipError: jzentry == 0,
jzfile = 49442184,
total = 17,
name = Calculator.apk,
i = 1,
message = null
       at java.util.zip.ZipFile$2.nextElement(ZipFile.java:321)
       at java.util.zip.ZipFile$2.nextElement(ZipFile.java:299)
       at java.util.jar.JarFile$1.nextElement(JarFile.java:225)
       at java.util.jar.JarFile$1.nextElement(JarFile.java:220)
       at com.android.signapk.SignApk.addDigestsToManifest(SignApk.java:194)
       at com.android.signapk.SignApk.main(SignApk.java:451)
들풀 아마 대부분 사람들은 정상적으로 잘 될텐데..~~ 이유를 잘 모르겠습니다. 전 ecliar 버전에서 작업했었습니다. 6/21 20:40
   
이름아이콘 더글라스
2010-06-23 11:04
들풀님
8. Apk 빌드시 Export Unsigned Application Package로 빌드한다

APK빌드할때 위의 것을 실행하면 bin화일안에 .apk가 찾을수가 없다고 합니다. 그래서 system/app에 있는 apk를 copy해서 갖다 두었습니다. 그러니까 되네요. 이렇게 하는게 맞나요?
그리고 SDK상에서는 run as android application으로 compile을 할 수 가 없었습니다.
이것을 11번과정까지 진행해서 aaa.apk을 simuator에 올렸는데 잘올라가긴 했습니다. 그러나 실제로 eclipse에서는 여전히 에러가 있어서 실제 소스 code를 compile이 안되네요 어떻게 해야되죠?
들풀 맞지않습니다.. 그냥 클릭하고, 생성할 apk 파일명만 입력해 주면 되는데..~~ 이상하네요..!! 6/23 14:15
   
이름아이콘 더글라스
2010-06-24 21:51
들풀님
우선 답변 주셔서 감사합니다.
우여 곡절 끝에 10번까지 와서 아래 명령어를 실행해서 signed된 Camera1.apk가 만들어졌는데
java -jar ./out/host/linux-x86/framework/signapk.jar  
      ./build/target/product/security/testkey.x509.pem  
      ./build/target/product/security/testkey.pk8
     Camera.apk Camera1.apk

왜 adb install Camera1.apk를 하면 Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE 가 나오죠?
들풀 camera package내의 Android.mk를 보시면, 아래의 Line이 보입니다.
--
LOCAL_CERTIFICATE := media
--
사인할 때 사용할 인증서가 testkey가 아니라, mediakey란 의미입니다.
아래와 같이 변경되어야 할 것입니다.
--
testkey.x509.pem => media.x509.pem
testkey.pk8 => media.pk8
6/24 23:53
   
이름아이콘 rndmania
2010-06-28 02:19
들풀님~ 항상 좋은 글 감사합니다.
한가지 궁금한 점은 들풀님의 말씀하시는 목적이
=========================================================
안드로이드에 이미 내장된 Application들(APKs)을
Android SDK와 Eclipse 개발환경에서 개발하기 위한 방법입니다.
==============================================================
위와 같은데 내장 프로그램들을 빌드해보거나 수정해보기 위한 것인지
아니면 내장 프로그램들 처럼 권한을 가질 수 있는 프로그램을 개발 하기 위한 것이
목적인 것인지요?(예를 들면 rebooting을 할 수 있는 권한을 가진 프로그램을 개발한다든지..)
들풀 기본적으로는 내장 Apk들을 빌드,수정하는 것이 목적이라고 해야 맞을 듯 합니다.
왜냐하면, 보호된(protected) 영역에 대한 접근권한을 얻는 것은
별도의 메카니즘(signature, signatureOrSystem이라는 protectionLevel 기반의 퍼미션)에
기반한다고 보는 것이 옳을 듯 합니다.
6/28 10:38
   
이름아이콘 rndmania
2010-06-28 15:18
그럼..(이곳에 질문드릴 성격의 글은 아닌것 같은데요..^^;;)
특정 위치에 파일을 복사한다든지 reboot을 한다든지 등의 권한이 필요한 app는
개발 불가능한건가요?
   
이름아이콘 더글라스
2010-07-19 16:57
phone.app같은 경우는  Export Unsigned Application Package로 해서 실제로 eclipse상에 수정을 할수 있으나 break point를 걸어서 runtime debugging은 할 수가 없었습니다.
이러한 app같은 경우는 이클립스를 이용해서 소스흐름을 break point를 걸어서 못따라가기 때문에
flow를 이해하기가 힘든데요. 내장 app의 flow를 이해하기 위한 가장좋은 방법은 뭘까요?
   
이름아이콘 Yongary
2010-07-20 10:31
안녕하세요, 질문이 있습니다.
2번에 avd를 새로 빌드한다는 게 어떻게 하는 것인가요?
그냥 .img파일 3개를 sdk밑에 images폴더밑에 복사를 한 후에,
create avd를 하는것 아닌가요?
   
이름아이콘 사황천하
2010-08-30 17:46
안녕하세요.
이클립스에서 Preference->Android->Build->Custom debug keystore 에 링크해서 쓸만한 Keystore를 직접 생성할 간단한 방법은 없나요??
들풀 아래의 Blog에 아주 잘 정리되어 있습니다. 참고하세요.
http://ecogeo.tistory.com/264
8/30 18:05
   
 
덧글 쓰기 0
32000
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
    N     분류     제목    글쓴이 작성일 조회
50 Galaxy-S 리눅스 커널 오픈소스 URL [2] 들풀 2010-07-21 2813
49 안드로이드 Froyo Source Open [5]+1 lesmin 2010-06-24 5203
48 안드로이드 내장 APKs 개발방법(초안) [27]+20 들풀 2010-03-05 13143
47 모토로이 소스 공개 [7]+3 Beto 2010-03-01 9852
46 안드로이드 2.1 Source Open [3]+2 자하랑 2010-01-21 8601
45 Android 1.6 브랜치 업데이트(1.3->1.4) [2]+1 인베인 2009-10-24 2107
44 SH4 CPU 아키텍쳐 지원을 위한 Android [2]+1 인베인 2009-09-17 1881
43 Samsung Galaxy 안드로이드 커널 빌드 [7]+14 들풀 2009-09-15 5615
42 Online PDK(Platform Dev. Kit) - donut [2]+1 들풀 2009-09-01 2274
41 MIPS용 안드로이드 소스코드 릴리즈 및 빌드방법.. [4]+6 인베인 2009-08-11 3895
40 iPAQ HX4700 PDA에 안드로이드를 포팅하자 [9] 좋은이 2009-08-10 3289
39 CENTOS 5.5에서 Android PDK설치방법 (Froyo브랜치) 인베인 2009-07-27 3117
38 Ubuntu 9.04 + Android 1.5 Build [4] bluedisk 2009-05-06 5801
37 Android Porting on x86 PC [10]+1 SPARC 2009-04-29 5779
36    Re.. 질문이요. VBoxManage convertfromraw 문제 [8] coojin 2009-05-15 1191
35 Create AVDs for SDK 1.5 [1] 이광우 2009-04-28 2186
34 [빙고]1.5 SDK Win & Linux 링크입니다 참고하세요 [13]+10 와이드오픈 2009-03-10 3302
33 ADT 0.9 Cupcake 용 [5] 자하랑 2009-02-10 2171
32    Re..No resource identifier found for attribute... [2] Leone 2009-02-18 1356
31 X86용으로 안드로이드 포팅하기(on Virtualbox) [7]+2 인베인 2009-02-09 5844
30 REAL TARGET BOARD 없이 안드로이드 포팅기술 익히기.. [16]+15 좋은이 2009-01-30 8193
29    Re..REAL TARGET BOARD 없이 안드로이드 포팅기술 익히기.. [4]+2 NPain 2009-03-21 2618
28    Re..REAL TARGET BOARD 없이 안드로이드 포팅기술 익히기.. [5] 딱신 2009-03-18 1867
27 Dalvik JNI 를 이용한 cpp 함수 추가 및 SDK 에서 사용하기.. [9] unbiari 2008-12-26 3766
26 안드로이드 전체소스 빌드(For X86) - Fedora 사용자.. [3] 인베인 2008-12-24 4685
25    Re..ASUS/EEE LapTop PC의 플랫폼 드라이버 코드 [2] 인베인 2009-02-09 905
24    Re..안드로이드 전체소스 빌드(For X86) - Fedora 사용자.. 인베인 2008-12-29 1536
23 안드로이드 전체소스 빌드(For X86) - Ubuntu사용자.. [14] 인베인 2008-12-24 6946
22 안드로이드 Native Development Kit(NDK) 사용법 [18]+3 들풀 2008-12-11 9418
21    Android NDK r3 공식 릴리즈 [3]+1 들풀 2010-03-09 1997
20    Re..android-ndk-1.6_r1 미리보기 [3]+1 들풀 2009-09-20 1550
19    Re.. android-ndk-1.5_r1 사용법 [windows] [7]+3 들풀 2009-06-29 4488
18 안드로이드 SDK Build 방법 [5] 들풀 2008-12-09 6051
17 Android Porting Guide for TI OMAP Zoom [1] 들풀 2008-12-07 2479
16 Git Community Book [3] 들풀 2008-12-07 1441
15 android build system [7] 베이징숀 2008-11-19 3877
14 Android Telephony for CDMA [1] 들풀 2008-11-28 1866
13 안드로이드 PDK (Platform Development Kit) [1] 들풀 2008-10-28 3756
12 Mac OS에서 Android 소스 받기 및 빌드 [10]+5 ratharn 2008-10-27 2662
11 Android 전체소스 빌드 방법(For ARM) on Fedora 배포판 -2008.. [8]+1 invain 2008-10-26 5973
10    Re.. Fedora배포판에서 Cupcake빌드시의 TroubleShooting.. 인베인 2010-03-18 949
9 [Samsung SC32442]용 Android 소스 빌드 [7] 들풀 2008-10-26 4540
8    Re.. sc32442 안드로이드 탑재 screen shot [15]+5 들풀 2009-01-12 1843
7    Neo 1973 phone [9] 들풀 2008-11-06 1424
6 안드로이드 전체 소스 코드 빌드 방법 [53]+7 들풀 2008-10-24 25659
5    HTC_DREAM Build (Donut) [6]+1 불타는주작 2009-08-04 1627
4    안드로이드 cupcake 빌드방법 [5]+5 들풀 2009-01-28 4250
3    안드로이드 플랫폼 개발을 위해 Eclipse 사용하기.. 들풀 2008-12-07 4347
2    안드로이드 소스 코드 빌드 테스트 [8]+1 들풀 2008-10-27 5125
1 안드로이드 오픈 소스 [7] 들풀 2008-10-22 7483
1