레이블이 ANDROID인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ANDROID인 게시물을 표시합니다. 모든 게시물 표시

2011년 3월 14일 월요일

StringTokenizer 자바 문자열 파싱

case SMARTCARD_RESPONSE_CONNECT:


Log.d(LOG_TAG, "SMARTCARD_RESPONSE_CONNECT");

responseLine = (String)ar.result;

Log.d(LOG_TAG, "responseLine=[" + responseLine + "]");

StringTokenizer st = new StringTokenizer(responseLine, ": ");

Log.d(LOG_TAG, "responsePrefix=[" + st.nextToken() + "]");

Log.d(LOG_TAG, "responseValue=[" + st.nextToken() + "]");

mResult = (ar.exception == null);

mDone = true;

break;
 
 
boolean hasMoreTokens()
int countTokens()

2010년 4월 7일 수요일

Android Application 프로세스의 권한 문제 해결 방법

#include 
#include 
#include 
#include  
#include 

int main(int argc, char** argv)
{
    printf("pppd running!!! [ \n");
    setuid(0); // 4755 퍼미션을 사용하기위해 uid를 0으로 셋팅한다.
    setgid(0); // 4755 퍼미션을 사용하기위해 gid를 0으로 셋팅한다.
    system("/system/bin/pppd /dev/s3c2410_serial3 115200 defaultroute");
    printf("pppd running!!! ] \n");
    
    return 0;
}
컴파일후 생성된 유틸의 퍼미션을 4755 로 설정하면 유틸리티의 UID 권한으로 실행된다.
/init.rc
chown radio system /etc/pppd-script (?)
chown root root /etc/pppd-script (?)
chmod 4755 /system/bin/pppd_runner

Android NDK 를 이용한 lib 만들기

  1. NDK 디렉토리의 구성
/android-ndk-r3/apps/dc-config/Application.mk
/android-ndk-r3/apps/dc-config/project/
/android-ndk-r3/apps/dc-config/project/jni/
/android-ndk-r3/apps/dc-config/project/jni/Android.mk
/android-ndk-r3/apps/dc-config/project/jni/dc-config.c
/android-ndk-r3/apps/dc-config/project/libs/
/android-ndk-r3/apps/dc-config/project/libs/armeabi/
/android-ndk-r3/apps/dc-config/project/libs/armeabi/libdc-config.so
    • /android-ndk-r3/apps/dc-config/Application.mk
      APP_PROJECT_PATH := $(call my-dir)/project
      APP_MODULES      := dc-config

    • /android-ndk-r3/apps/dc-config/project/jni/Android.mk
      LOCAL_PATH := $(call my-dir)

      include $(CLEAR_VARS)

      LOCAL_MODULE    := dc-config
      LOCAL_SRC_FILES := dc-config.c
      LOCAL_LDLIBS := -llog

      include $(BUILD_SHARED_LIBRARY)

    • /android-ndk-r3/apps/dc-config/project/jni/dc-config.c
      #include <string.h>
      #include <jni.h>
      #include <stdlib.h>
      #include <unistd.h>

      #include <android/log.h>
      #define LOG_TAG "DC-CONFIG"
      #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__);

      /*
       * LIB를 사용하는 JAVA CLASS 에  정의된 package 명과 동일한 구조로 함수명을 작성한다(?)
       * Java_[PACKAGE]_[CLASS NAME]_[FUNCTION NAME](JNIEnv* env, jobject thiz)
       * /Eclair/packages/apps/Phone/src/com/android/phone/CdmaDataCallCheckBoxPreference.java
       * package com.android.phone;
       * public class CdmaDataCallCheckBoxPreference extends CheckBoxPreference {
       * public native String  stringFromJNI();
       */
      jstring
      Java_com_android_phone_CdmaDataCallCheckBoxPreference_stringFromJNI( JNIEnv* env,
                                                        jobject thiz )
      {
          int rtn = 0;

          LOGD("PPPD_RUNNER START");
          rtn = system("/system/bin/pppd_runner");
          LOGD("PPPD_RUNNER START [%d]", rtn);

          return (*env)->NewStringUTF(env, "TEST Hello from JNI !");
      }

    • /android-ndk-r3/apps/dc-config/project/libs/armeabi/libdc-config.so
      컴파일 후 생성되는 lib 파일

  1. 컴파일


    # cd /android-ndk-r3/
    # make APP=dc-config
  2. 사용



    /Eclair/packages/apps/Phone/src/com/android/phone/CdmaDataCallCheckBoxPreference.java

    package com.android.phone;

    ( ... )

    public class CdmaDataCallCheckBoxPreference extends CheckBoxPreference {
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);

            TextView  tv = new TextView(   this );
            tv.setText( stringFromJNI() );
            setContentView(tv);
        }
        public native String  stringFromJNI();
        static {
            System.loadLibrary("dc-config");
        }
    }
  3. 파일시스템에 라이브러리 추가


    /system/lib/libdc-config.so

2010년 3월 31일 수요일

시스템에 파일 추가하기.

[1] 추가할 파일에 대한 정의

system/core/rootdir/Android.mk

copy_from := \
etc/dbus.conf \
etc/hosts \
etc/init.gprs-pppd \
etc/ppp/chap-secrets \
etc/ppp/ip-down \
etc/ppp/ip-up

 [2] 추가할 파일을 아래와 같이 복사

system/core/rootdir/

[jsk@mdroid 02.eclair]$ ll -R system/core/rootdir/
system/core/rootdir/:
합계 24
-rwxrwxrwx 1 jsk jsk 1845 2010-03-31 14:58 Android.mk
drwxrwxrwx 4 jsk jsk 4096 2010-03-31 16:32 etc
-rwxrwxrwx 1 jsk jsk 14169 2010-03-22 09:29 init.rc


system/core/rootdir/etc:
합계 48
-rwxrwxrwx 1 jsk jsk 935 2010-03-22 09:29 dbus.conf
-rwxrwxrwx 1 jsk jsk 25 2010-03-22 09:29 hosts
-rwxrwxrwx 1 jsk jsk 1677 2010-03-22 09:29 init.goldfish.rc
-rwxrwxrwx 1 jsk jsk 1176 2010-03-22 09:29 init.goldfish.sh
-rw-r--r-- 1 jsk jsk 525 2010-03-31 16:32 init.gprs-pppd
-rwxrwxrwx 1 jsk jsk 9280 2010-03-22 09:29 init.testmenu
-rwxrwxrwx 1 jsk jsk 718 2010-03-22 09:29 mountd.conf
drwxr-xr-x 3 jsk jsk 4096 2010-03-31 15:01 ppp
-rwxrwxrwx 1 jsk jsk 321 2010-03-22 09:29 vold.conf


system/core/rootdir/etc/ppp:
합계 12
-rw-r--r-- 1 jsk jsk 11 2010-03-31 14:41 chap-secrets
-rw-r--r-- 1 jsk jsk 388 2010-03-31 14:42 ip-down
-rw-r--r-- 1 jsk jsk 845 2010-03-31 14:44 ip-up

[3] 컴파일 후 확인

out/target/product/XXX/system/etc/

2010년 3월 25일 목요일

byte[] 을 String 로 변환하기

import java.util.Arrays;

byte smsc[] = (byte[]) map.get("smsc");
byte pdu[] = (byte[]) map.get("pdu");

Message reply = obtainMessage(EVENT_SEND_SMS_COMPLETE, tracker);

Log.e("[JSK]", "smsc: " + Arrays.toString(smsc));
Log.e("[JSK]", "pdu: " + Arrays.toString(pdu));

2010년 3월 23일 화요일

ANDROID빌드환경에서 LINUX바이너리컴파일

[jsk@mdroid eclair]$ pwd
/home/jsk/00.SOURCE/ma110/trunk/mdroid/eclair
[jsk@mdroid eclair]$ ls -l system/core/
합계 116
-rw-rw-r-- 1 jsk jsk 933 2010-03-09 14:11 Android.mk
-rw-rw-r-- 1 jsk jsk 764 2010-03-09 14:11 README
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 adb
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 cpio
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 debuggerd
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 fastboot
drwxrwxr-x 13 jsk jsk 4096 2010-03-09 14:11 include
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 init
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libacc
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libctest
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libcutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 liblog
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libmincrypt
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libnetutils
drwxrwxr-x 6 jsk jsk 4096 2010-03-09 14:11 libpixelflinger
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libsysutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libzipfile
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logcat
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logwrapper
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 mkbootimg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 netcfg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 nexus
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 rootdir
drwxrwxr-x 5 jsk jsk 4096 2010-03-09 14:11 sh
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 toolbox
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 vold

0. system/core/ 디렉토리에 보면 커맨드로 사용되는 유틸리티들이 있음.

1. 컴파일하고자하는 C코드(Linux 유틸)를 system/core/ 빌드환경에 맞춰 준다.

1.1. system/core/Android.mk 파일에 의해서 system/core/ 하위 디렉토리는 컴파일 대상이 된다.
=> 하위 디렉토리에 Android.mk 파일에 의해서 컴파일 여부가 결정 됨

1.2. cp -ar system/core/netcfg system/core/dpram_dbg
=> 빌드환경을 갖고있는 디렉토리를 dpram_dbg 디렉토리로 복사 함

1.3. cp dpram_dbg.c system/core/dpram_dbg/dpram_dbg.c
=> 컴파일하고자 하는 C코드를 위에서 생성한 디렉토리에 복사함.

1.4. vim system/core/dpram_dbg/Android.mk
=> LOCAL_SRC_FILES, LOCAL_MODULE, LOCAL_SHARED_LIBRARIES 수정
------------------------------------------------------------
ifneq ($(BUILD_TINY_ANDROID),true)
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= dpram_dbg.c
LOCAL_MODULE:= dpram_dbg

#LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
#LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)
#LOCAL_STATIC_LIBRARIES := libcutils libc

LOCAL_SHARED_LIBRARIES := libc libnetutils

include $(BUILD_EXECUTABLE)
endif

1.5. 안드로이드 루트 디렉토리에서 빌드하면 됨
=> 라이브러리가 없어서 *.h 를 못찾는 에러가 나오면
LOCAL_SHARED_LIBRARIES 에 lib* 시작하는 라이브러리를 추가해주면 될 듯
lib* 은 /system/core/ 디렉토리에 많이 있음.

2010년 3월 5일 금요일

파일시스템 리마운트

# mount -o remount,rw rootfs /
# mount -o remount,rw /dev/block/mtdblock0 /system

Android LOG

* 안드로이드 어플에서 로그 찍기


인클루드:

import android.util.Log;

사용:

private static final String TAG = "[[BMA150]]"; // 테그는 클래스에 선언
Log.d(TAG, "test");

* 안드로이드 네이티브 C에서 로그 찍기

인클루드:

#include 
사용:

#define LOG_TAG "Sensors-BMA150"
LOGD("%s", __FUNCTION__);

2010년 1월 12일 화요일

java 컴파일 설정

  1. 설치된 자바 리스트 확인
    jsk@ubuntu:~$ update-java-alternatives --list
    java-1.5.0-sun 53 /usr/lib/jvm/java-1.5.0-sun
    java-6-sun 63 /usr/lib/jvm/java-6-sun
      
  2. 자바 설정(java, javac, javah, javadoc)
    jsk@ubuntu:~$ sudo update-alternatives --config java
    [sudo] password for jsk:
    There are 2 alternatives which provide `java'.
    Selection Alternative
    -----------------------------------------------
    *+       1 /usr/lib/jvm/java-6-sun/jre/bin/java
               2 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
    Press enter to keep the default[*], or type selection number: 1
    Using '/usr/lib/jvm/java-6-sun/jre/bin/java' to provide 'java'.

  3. javac / javah / javadoc 동일하게 설정 
    sudo update-alternatives --config javac
    sudo update-alternatives --config javah
    sudo update-alternatives --config javadoc

2009년 12월 23일 수요일

Cygwin 실행

Microsoft Windows XP [Version 5.1.2600]

(C) Copyright 1985-2001 Microsoft Corp.


C:\Documents and Settings\Administrator>cd c:\
C:\>chdir C:\apps\Brew_tools\apps\cygwin\bin
C:\apps\Brew_tools\apps\cygwin\bin>bash --login -i

Administrator@coderilla-nb ~

NDK 예제 및 활용

  1. NDK 디렉토리
    • C:\apps\Brew_tools\apps\cygwin\home\Administrator\android-ndk-1.5_r1\apps\hello-jni\project\src\com\example\hellojni\
      • APP(JAVA) 소스가 있음
    • C:\apps\Brew_tools\apps\cygwin\home\Administrator\android-ndk-1.5_r1\sources\samples\hello-jni\
      • Native(C) 소스가 있음
    • C:\apps\Brew_tools\apps\cygwin\home\Administrator\android-ndk-1.5_r1\out\apps\hello-jni\android-1.5-arm\
      • Build 후 생성되는 so(Shared Object)를 갖고 있음



  2. Build 하기

    • NDK 홈으로 이동
      • cd ~/android-ndk-1.5_r1
    • Build
      • make APP=hello-jni

  3. NDK 활용

    1. Native Code 만들기(hello-jni 에서 복사)
      • mkdir ~/android-ndk-1.5_r1/sources/samples/hi-jni/

      • cp -r ~/android-ndk-1.5_r1/sources/samples/hello-jni/* ~/android-ndk-1.5_r1/sources/samples/hi-jni/

      • mv ~/android-ndk-1.5_r1/sources/samples/hi-jni/hello-jni.c ~/android-ndk-1.5_r1/sources/samples/hi-jni/hi-jni.c

    2. Nitive Code Mk 파일 수정

      •  vi ~/android-ndk-1.5_r1/sources/samples/hi-jni/Android.mk
        • LOCAL_MODULE := hello-jni hi-jni
        • LOCAL_SRC_FILES := hello-jni.c hi-jni.c


    3. Native Code 수정
      • vi ~/android-ndk-1.5_r1/sources/samples/hi-jni/hi-jni.c
        • jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
        • jstring Java_com_example_hijni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
        • java 패키지명과 동일하게 설정.
    4. APP 만들기(hi-jni 에서 복사)
      • mkdir ~/android-ndk-1.5_r1/apps/hi-jni
      • cp -r ~/android-ndk-1.5_r1/apps/hello-jni/* ~/android-ndk-1.5_r1/apps/hi-jni/
    5. APP Mk 파일 수정(모듈명 변경)
      • vi ~/android-ndk-1.5_r1/apps/hi-jni/Application.mk
        • APP_MODULES := hello-jni hi-jni
    6. Build
      • cd ~/android-ndk-1.5_r1Build
      • make APP=hi-jni

NDK 설치(WINDOW)


  1. Cygwin 설치 
    • Cygwin 이 이미 전체 설치 되어있다면 아래 Cygwin 설치 과정은 생략할 것.
      • 모뎀 컴파일과 꼬일 수도 있으니 조심 조심.

[ 그림 01 - 실행화면 ]


[ 그림 02 - 설치방법: 인터넷 설치 선택 ]


 [ 그림 03 - 설치 디렉토리 지정 ]


 [ 그림 04 - 설치 파일 다운로드 할 경로 지정 ]


 [ 그림 05 - 인터넷 연결방법 선택: Direct Conn ]


 [ 그림 06 - 다운로드 요청 FTP 추가: http://ftp.daum.net/ ]


 [ 그림 07 - 설치 패키지 설정: All install ]
( Category  에서 All 클릭하면 'Default' 에서 'Install' 로 바뀜 )


 [ 그림 08 - 다운로드 및 설치 시작 ]
( 오래 걸림 )


 [ 그림 09 - 설치 완료 ]
  • 설치 완료 후 Cygwin 을 실행하여 사용자 홈디렉토리를 생성한다.

  • 실행만 시키면 자동으로 생김.


  1. Android NDK 설치


[ 그림 10 - NDK 압축해제: 경로는 Cygwin 을 설치한 디렉토리 하위의 사용자  home 디렉토리 ]



[ 그림 11 - NDK 적용 ]

  1. Cygwin 실행


  2. NDK 디렉토리로 이동


    • cd android-ndk-1.5_r1


  3. 설치 스크립트 실행


    • bash ./build/host-setup.sh

2009년 12월 16일 수요일

Android App 개발환경 구축

  1. Java JDK 설치
  2. Android SDK 설치
  3. Eclipse 설치

 
  1. Java JDK 설치
    1. http://java.sun.com/javase/downloads/index.jsp
    2. [Java SE Development Kit (JDK)] - JDK 6 Update XX 최신 버전 다운로드
    3. 설치 - 설치 경로 확인 'C:\Program Files\Java'
    4. 환경 변수 등록
      1. java home 설정 추가
        • 변수 이름: JAVA_HOME
        • 변수 값: C:\Program Files\Java\jdk1.6.0_17
      2. jdk bin path 설정(시스템 변수 편집)
        • 변수 이름: PATH
        • 변수 값: C:\Program Files\Java\jdk1.6.0_17\bin;
  2. Android SDK 설치
    1. http://developer.android.com/sdk/index.html
    2. 최신 버전 다운로드(Windows android-sdk_r04-windows.zip)
    3. 압축 해제 - 경로 설정 'C:\Program Files\Java\android-sdk-windows'
    4. 환경 변수 등록
      1. android tools path 설정(시스템 변수 편집)
        • 변수 이름: PATH
        • 변수 값: C:\Program Files\Java\android-sdk-windows\tools;
  3. Eclipse 설치
    1. http://www.eclipse.org/downloads/
    2. Eclipse IDE for Java Developers (92 MB) 최신 버전 다운로드
    3. 압축 해제 - 경로 설정 'C:\Program Files\Java\eclipse'
    4. Android 관련 설치 및 설정
      1. Android ADT
        • eclipse [Help]-[Install New Software]
        • Add... -> Location : http://dl-ssl.google.com/android/eclipse/ 입력 Ok
        • 체크 박스 선택 후 다음 클릭
        • 기본 설치
      2. Android SDK 경로 설정
        • eclipse [Windows]-[Preference]
        • Android -> SDK Location : C:\Program Files\Java\android-sdk-windows 입력 Apply
      3. Android Virtual Device 만들기
        • eclipse [Windows]-[Android SDK and AVD Manager]
        • available Packages -> 전체 설치