Programming/android2010. 9. 11. 10:22
안드로이드 개발환경(Android SDK / Eclipde ADT)에는 AVD 라는 것이 존재해서
가상 안드로이드 기기를 구동은 할수 있는데 시스템을 구성하는 rootFS가 존재하지 않고 있다.
그래서 디렉토리를 뒤져보다 보니

platforms 아래의 안드로이드 버전별 디렉토리에 images 라는 녀석이 존재하고
리눅스로 옮겨서 파일종류를 보니, 다음과 같은 내용이 나왔다.

$ file *
NOTICE.txt:   ISO-8859 English text
kernel-qemu:  data
ramdisk.img:  gzip compressed data, from Unix
system.img:   VMS Alpha executable
userdata.img: VMS Alpha executable

$ ll -h
합계 84M
drwxr-xr-x 2 morpheuz morpheuz 4.0K 2010-09-11 10:01 ./
drwxr-xr-x 5 morpheuz morpheuz 4.0K 2010-09-11 10:01 ../
-rwxr--r-- 1 morpheuz morpheuz 307K 2010-09-11 01:04 NOTICE.txt*
-rwxr--r-- 1 morpheuz morpheuz 1.4M 2010-09-11 01:04 kernel-qemu*
-rwxr--r-- 1 morpheuz morpheuz 161K 2010-09-11 01:04 ramdisk.img*
-rwxr--r-- 1 morpheuz morpheuz  78M 2010-09-11 01:04 system.img*
-rwxr--r-- 1 morpheuz morpheuz 3.9M 2010-09-11 01:04 userdata.img*

이름이나 사이즈를 봐서는 system.img가 RootFS일 가능성이 높아 보인다.

Android emulator has 3 basic images on tools/lib/images directory.
    * ramdisk.img
    * system.img
    * userdata.img

system.img and userdata.img have the contents of /system and /data directory on root file system.

[링크 : http://wiki.kldp.org/wiki.php/AndroidPortingOnRealTarget]

안드로이드 시스템에서 /system은 퍼미션이 되지만
/data는 안되므로 userdata.img를 분석해 보는게 이득이고, 마운트 해야할 파일의 방향이 잡혔다.

그리고 안드로이드는 YAFFS2를 rootFS용 filesystem으로 사용하기 때문에,
일반 PC에서 이러한 rootFS를 열어보기 위해서는 해당 파일 시스템을 지원하는지 봐야 하는데
리눅스에서 /proc/filesystem에 지원하는 파일 시스템이 목록이 나온다.

$ cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cpuset
nodev   tmpfs
nodev   devtmpfs
nodev   debugfs
nodev   securityfs
nodev   sockfs
nodev   pipefs
nodev   anon_inodefs
nodev   inotifyfs
nodev   devpts
        ext3
        ext2
        ext4
nodev   ramfs
nodev   hugetlbfs
nodev   ecryptfs
nodev   fuse
        fuseblk
nodev   fusectl
nodev   mqueue
nodev   rpc_pipefs
nodev   nfsd
nodev   binfmt_misc

yaffs2는 없으니 아마도.. 커널을 재 컴파일 하는 무시무시한 작업을 해야 할것 같다.
날려도 되는 시스템이지만.. 재구축하기 귀찮아서 두렵다 -_-

음.. UML(User Mode Linux) 란걸로 대체해서 해볼까? 메인 리눅스 날리면 귀찮은디 ㅠ.ㅠ
[링크 : http://user-mode-linux.sourceforge.net/]

아래는 ubuntu 에서 커널 컴파일을 통한 yaffs2 추가하기
[링크 : http://seulkom.tistory.com/34]

아래는 qemu 라는 것으로 AVD 없이 안드로이드를 구동시킨 화면
[링크 : http://www.kandroid.org/board/board.php?board=androidsource&command=body&no=24]
[링크 : http://cs.sch.ac.kr/cs_homepage/seminar/android/Android.htm]




ramdisk.img는 ramfs 이지만 mount로는 보이지않고 cpio로 원래대로 추출(extract) 시켜주어야 나온다.
$ gzip -cd ramdisk.img > ramdisk
$ cpio -iv -F ramdisk
[링크 : http://wiki.kldp.org/wiki.php/AndroidPortingOnRealTarget]

$ cpio -iv -F ramdisk
data
default.prop
dev
init
init.goldfish.rc
init.rc
proc
sbin
sbin/adbd
sys
system
512 blocks

$ file *
data:              directory
default.prop:      ASCII text
dev:               directory
init:              ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
init.goldfish.rc:  ASCII English text
init.rc:           ASCII English text
proc:              directory
sbin:              directory
sys:               directory
system:            directory

Posted by 구차니
Programming/android2010. 9. 11. 00:39
이클립스 켜기 귀찮아서 "SDK Setup.exe" 로 그냥 실행했더니


Android SDK Tools, revision 7 이라는 메인 패키지(!)가 다운을 받고

설치를 하려다가 파일을 잡고있다고 해서 설치가 되지 않는다.

머.. 이런 이유로 번거롭더라도 SDK 업데이트를 위해서는
eclipse의 "window - Android SDK and AVD manager" 메뉴에서 실행해서 하도록 하자

'Programming > android' 카테고리의 다른 글

안드로이드 플랫폼 다운로드 / 구축  (2) 2010.09.11
Android RootFS  (2) 2010.09.11
apk - Android PacKage  (3) 2010.09.05
안드로이드에서 apk 빼내기  (0) 2010.09.05
안드로이드 "모의 위치 허용"이 모야?  (0) 2010.09.05
Posted by 구차니
Programming/C++ STL2010. 9. 9. 15:12
음.. 예전에 어떤 분의 블로그에서 스마트 포인터 란것을 들었지만
어떤건지 알지 못했는데 C++/STL 공부하면서 문득 떠올라 검색을 하니 아래와 같이 상큼하게 정의가 내려져있다.

C++은 자바와 같은 가비지 컬렉션(GC) 기능이 없어서,
new로 동적 할당한 객체를 매번 delete를 써서 수동으로 삭제해야 하는 건 아실 겁니다.
조심하지 않으면 엄청난 메모리 누수(leak)가 나버리는 버그가 발생할 가능성이 있죠.
(이런 버그를 잡기위해서 바운즈 체커나 코드 가드와 같은 프로그램이 나온거죠.)

....

부스트 라이브러리의 스마트 포인터에 대한 문서는 다음 링크를 참고하세요.
http://boost.org/libs/smart_ptr/smart_ptr.htm
http://boost.org/libs/smart_ptr/shared_ptr.htm

위의 예제를 boost::shared_ptr을 써서 고치면 다음과 같습니다.

void doSomething()
{
  typedef boost::shared_ptr<Widget> SPW; // "Shared_Ptr to Widget"
  vector<SPW> vwp;
  for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
    vwp.push_back(SPW(new Widget));
  ...
} // vwp가 스코프에서 벗어나는 순간, 자동으로 메모리를 해제합니다.


[링크 : http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=22740]

간단하게 말하자면, free() 를 알아서 해주는 일종의 "프레임웍"이나" 라이브러리"라는 의미.

머.. 그래도 인간이 직접 적절하게 free() 해주는게 장땡인듯 -ㅁ-
[링크 : http://www.iamcorean.net/131]

'Programming > C++ STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
C++ 강좌/문법/reference  (4) 2010.09.09
STL 그리고 Template  (0) 2010.09.09
Posted by 구차니
Programming/C++ STL2010. 9. 9. 11:12
winapi.co.kr 의 주인장은.. 영자 사기캐릭 스멜이 자꾸만 난단 말이지..
아무튼 뜬금없이(!) C++ 공부중!

[링크 : http://winapi.co.kr/]
    [링크 : http://winapi.co.kr/clec/cpp3/cpp3.htm]
[링크 : http://www.cppreference.com/wiki/start]
[링크 : http://www.cplusplus.com/reference/]

'Programming > C++ STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
STL 그리고 Template  (0) 2010.09.09
Posted by 구차니
Programming/C Win32 MFC2010. 9. 9. 09:54
WinMain은 어플리케이션(독립 프로그램)의 ENTRY point 이고
DllMain은  Dll(라이브러리)의 ENTRY point 이다.

리눅스의 so 에서는 이런 ENTRY point가 없었는데, 먼가 생소한 느낌 -ㅁ-!

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
);

[링크 : http://msdn.microsoft.com/en-us/library/ms633559%28VS.85%29.aspx] WinMain

BOOL WINAPI DllMain(
  __in  HINSTANCE hinstDLL,
  __in  DWORD fdwReason,
  __in  LPVOID lpvReserved
);

[링크 : http://msdn.microsoft.com/en-us/library/ms682583%28VS.85%29.aspx] DllMain

Dll 역시 굳이 엔트리 포인트가 필요는 없으나, 단순한 함수의 모음이 아닌 특정 모듈로서의 Dll 이라
초기화가 필요하다면, 엔트리 포인트를 써야 한다고 한다.
[링크 : http://todayis.tistory.com/210]

그래도 역시 DllMain은 비어있는게 정석?!
[링크 : http://www.jiniya.net/tt/788]
Posted by 구차니
Programming/C++ STL2010. 9. 9. 09:14
STL - Standard Template Library
원래는 SGI 에서 C++ 지원용으로 개발된 템플릿이다.
[링크 : http://www.sgi.com/tech/stl/index.html]

Scott Meyers 가 작성한 Effective STL (200page)
[링크 : http://www.uml.org.cn/c++/pdf/EffectiveSTL.pdf]

Template는 c++ 에서 지원하는 기능으로
함수나 클래스등을 형(type)에 관계없이 작동시키는(generic type - 일반형) 것이라고 한다.

#include <iostream>
 
template <typename T>
const T& max(const T& x, const T& y)
{
  if(y < x)
    return x;
  return y;
}
 
int main()
{
  // This will call max <int> (by argument deduction)
  std::cout << max(3, 7) << std::endl;
  // This will call max<double> (by argument deduction)
  std::cout << max(3.0, 7.0) << std::endl;
  // This type is ambiguous; explicitly instantiate max<double>
  std::cout << max<double>(3, 7.0) << std::endl;
  return 0;
}

[링크 : http://en.wikipedia.org/wiki/Template_%28programming%29]

[링크 : http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library]
[링크 : http://www.iis.sinica.edu.tw/~kathy/vcstl/templates.htm]

'Programming > C++ STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
Posted by 구차니
Programming/ATL WTL COM2010. 9. 7. 16:31
Win32API는 C로 만들어졌음
MFC는 Win32API를 C++로 감쌈(wrapping)

STL은 C++에서 쓰기쉽도록 여러가지 라이브러리를 모아놓은 것
ATL은 COM을 쉽게 쓸수 있도록 만든 것
WTL은 ATL 기반으로 MFC와 ActiveX를 경량화한 것

MFC의 일부는 COM을 지원하도록 설계
ATL은 COM을 지원하도록 전적으로 설계
ActiveX는 ATL이나 MFC로 작성가능

OWL은 borland c++ 을 위한 winAPI framework
boost C++ library는 c++ 를 확장하기 위한 것.


[링크 : http://en.wikipedia.org/wiki/Win32]
[링크 : http://en.wikipedia.org/wiki/Standard_Template_Library]
[링크 : http://en.wikipedia.org/wiki/Windows_Template_Library]
[링크 : http://en.wikipedia.org/wiki/Active_Template_Library]
[링크 : http://en.wikipedia.org/wiki/Microsoft_Foundation_Classes]
[링크 : http://en.wikipedia.org/wiki/Component_Object_Model]
[링크 : http://en.wikipedia.org/wiki/Object_Windows_Library]
[링크 : http://en.wikipedia.org/wiki/Boost_C%2B%2B_Libraries]

[링크 : http://msdn.microsoft.com/en-us/library/k851ext3%28VS.80%29.aspx] MFC/COM
[링크 : http://msdn.microsoft.com/en-us/library/k194shk8%28v=VS.80%29.aspx] MFC/ActiveX

[링크 : http://kanemochi.egloos.com/8848925]
[링크 : http://jacking75.cafe24.com/WTL/Index.htm]
Posted by 구차니
Programming/android2010. 9. 5. 02:01
혹시나 해서 헤더를 봤더니 역시나.. PK로 시작한다(즉, ZIP 압축파일)
그래서 빵집으로 보면 내용이 보인다!



아마도 자바의 jar과 유사한것으로 생각을 했는데, 영문 위키를 보니

An .apk file extension denotes an Android Package (APK) file. This file format, a variant of the JAR format, is used for the distribution and installation of bundled components onto the Android mobile device platform

An APK file is an archive that usually contains the following:

  • AndroidManifest.xml
  • classes.dex
  • resources.arsc
  • res (folder)
  • META-INF (folder)

An .apk file can be opened and inspected using common archive tools such as 7-Zip, Winzip, Winrar and Ark.


[링크 : http://en.wikipedia.org/wiki/APK_%28file_format%29]
머.. 새삼스러운 내용도 아니지만, 그래도 일단 신기신기!



Posted by 구차니
Programming/android2010. 9. 5. 01:52
SDK를 설치하고, ddms.bat를 실행하면 Dalvik Debug Monitor가 실행되는데

"Device - File Explorer"을 구동하면 별도의 프로그램 설치없이 핸드폰 내부의 내용을 볼수있다.
물론, 프로그램을 받아서 실행해도 권한문제로 볼수 없는 부분이 많고, 디버거에서도 sbin이나 root 등은 보여지지 않는다 -_-

아무튼, /system 에는 안드로이드 시스템의 프로그램들이 설치되는데

/system/bin 에는 파일명들로 봐서는 일반 리눅스 시스템의 /bin과 유사해 보인다.
(그러니까 각종 시스템 실행파일들이 존재한다. 내려가면 ls 라던가 ifconfig 등도 보인다.)

그리고 마켓을 통해 다운받은 프로그램은 인스톨러 버전이고, 이녀석들은 /system/app 에 저장된다. (오홍!)
apk가 유포되는데 아마 이것을 통해서 뺴내는 것으로 생각된다.
(해보지는 않았지만, 유료어플도 이런걸로 빼면 다른 데서 실행이 되려나?)


Posted by 구차니
Programming/android2010. 9. 5. 01:46
안드로이드 폰에서 "설정 - 응용프로그램 - 개발"에 보면 "모의 위치 허용" 이라는 것이 있다.
도대체 머하는 녀석인지 궁금증 발동!



개발 화면
개발 화면에는 Android 애플리케이션 개발에 유용한 설정이 들어 있습니다.
Android API 및 개발 도구에 대한 도움말을 비롯한 자세한 정보는 Android 개발자 웹사이트 (http://developer.android.com) 를 참조하세요 .

USB 디버깅
USB 연결을 통해 컴퓨터의 디버깅 도구가 휴대전화와 통신할 수 있도록 하려면 선택합니다 .

켜진 상태로 유지
휴대전화를 충전기에 연결하거나 전원을 공급하는 USB 장치에 연결했을 때 화면이 흐려지거나 잠기는 것을 방지하려면 선택합니다 . 고정된 이미지가 휴대전화에 장시간 표시된 상태로 이 설정을 사용하지 마세요 . 화면에 해당 이미지의 자국이 남을 수 있습니다 .

모의 위치 허용
휴대전화의 자체 내부 도구를 사용하는 것이 아니라 컴퓨터의 개발 도구가 휴대전화에서 인식하는 위치를 제어할 수 있도록 허용하려면 선택합니다 .

[링크 : www.google.com/googlephone/android-userguide_kr.pdf]

자세한 내용은 모르겠지만, 이걸 확인하면 개발도구에서(SDK) 핸드폰의 위치 정보를 변경이 가능한것으로 보인다.
예를들면, GPS의 값이나 혹은 핸드폰 기지국을 통해 받아오는 위치정보 이런게 변경될듯?


+

2017.01.25

[링크 : https://www.xda-developers.com/fake-android-location/]

[링크 : http://stackoverflow.com/questions/2531317/android-mock-location-on-device]


Posted by 구차니