안드로이드의 Framework 에 내가 짠 코드를 추가하고 싶은 경우에 어떻게 해야 할까? 다양한 방법이 있겠지만(있을까??), 검색해본 결과, 기존 frameworks 의 다른 라이브러리들과 동일하게 추가해주는 것이 가장 간단한 방법인 것으로 생각된다. 작성한 코드는 java 라이브러리 및 java 라이브러리에서 호출하는 JNI 로 구성되어있다고 가정한다.
1. frameworks 에 디렉토리 및 파일 추가
내가 만든 코드를 frameworks 에 추가하여 frameworks.jar 파일에 포함시키고 싶다면, 우선 다음과 같은 위치에 디렉토리를 생성한다.
<ANDROID_TOPDIR>/frameworks/base/<my_directory>
my_directory 아래에 java/<package name directory>/<java files> 와 같은 방식으로 넣는다.
예를 들어 내가 만든 자바 package name 이 com.android.newframe 이라고 하고, 나의 자바 라이브러리 디렉토리 이름을 myframe 이라고 한다면, 다음과 같이 디렉토리구조를 생성하여 만들어 넣는다.
<ANDROID_TOPDIR>/frameworks/base/myframe/java/com/android/newframe/<java files>
2. mk 파일 수정
위와 같이 디렉토리 구조를 만든 후에, 컴파일시에 해당 java 가 frameworks 의 일부로 빌드되어야 함을 알려주어야 한다.
<ANDROID_TOPDIR>/build/core/pathmap.mk 파일을 열어서 FRAMEWORKS_BASE_SUBDIRS 를 찾은 후에 1. 에서 추가한 디렉토리 이름(myframe)을 한줄 추가한다.
이렇게 하면 내가 만든 java code 가 android 의 framework 에 jar 파일로 포함된다. build 후에 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classses.jar 파일을 열어서 확인해보면 컴파일된 나의 java class 가 존재하는 것을 확인할 수 있다.
내가 작성한 JNI 를 안드로이드에 포함시키기 위해서는 다음의 절차를 따른다.
1. frameworks 에 디렉토리에 및 파일 추가
java 라이브러리를 추가할 때 생성한 디렉토리에 jni 라는 디렉토리를 만든다. 해당 디렉토리에 native code 가 구현된 파일을 추가한다.
2. Android.mk 파일 추가
jni 디렉토리에 Android.mk 파일을 추가한다. Android.mk 파일의 내용은 아래의 형식으로 만든다.
jni 추가한 파일이 a.cpp b.cpp 이고 만들 native library 이름이 hellojni 라고 가정하면 Android.mk 파일은 아래와 같이 만들면 된다.
이렇게 한 후에 build 하게 되면 LOCAL_MODULE 에서 정해진 이름으로 so 파일이 생성된다.
1. frameworks 에 디렉토리 및 파일 추가
내가 만든 코드를 frameworks 에 추가하여 frameworks.jar 파일에 포함시키고 싶다면, 우선 다음과 같은 위치에 디렉토리를 생성한다.
<ANDROID_TOPDIR>/frameworks/base/<my_directory>
my_directory 아래에 java/<package name directory>/<java files> 와 같은 방식으로 넣는다.
예를 들어 내가 만든 자바 package name 이 com.android.newframe 이라고 하고, 나의 자바 라이브러리 디렉토리 이름을 myframe 이라고 한다면, 다음과 같이 디렉토리구조를 생성하여 만들어 넣는다.
<ANDROID_TOPDIR>/frameworks/base/myframe/java/com/android/newframe/<java files>
2. mk 파일 수정
위와 같이 디렉토리 구조를 만든 후에, 컴파일시에 해당 java 가 frameworks 의 일부로 빌드되어야 함을 알려주어야 한다.
<ANDROID_TOPDIR>/build/core/pathmap.mk 파일을 열어서 FRAMEWORKS_BASE_SUBDIRS 를 찾은 후에 1. 에서 추가한 디렉토리 이름(myframe)을 한줄 추가한다.
이렇게 하면 내가 만든 java code 가 android 의 framework 에 jar 파일로 포함된다. build 후에 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classses.jar 파일을 열어서 확인해보면 컴파일된 나의 java class 가 존재하는 것을 확인할 수 있다.
내가 작성한 JNI 를 안드로이드에 포함시키기 위해서는 다음의 절차를 따른다.
1. frameworks 에 디렉토리에 및 파일 추가
java 라이브러리를 추가할 때 생성한 디렉토리에 jni 라는 디렉토리를 만든다. 해당 디렉토리에 native code 가 구현된 파일을 추가한다.
2. Android.mk 파일 추가
jni 디렉토리에 Android.mk 파일을 추가한다. Android.mk 파일의 내용은 아래의 형식으로 만든다.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := <src file1> <src file2> ...
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
LOCAL_MODULE := <target name>
LOCAL_SHARED_LIBRARIES := liblog
#LOCAL_CFLAGS := -DCONFIG_EMBEDDED -DUSE_IND_THREAD
LOCAL_PRELINK_MODULE:=false
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := <src file1> <src file2> ...
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
LOCAL_MODULE := <target name>
LOCAL_SHARED_LIBRARIES := liblog
#LOCAL_CFLAGS := -DCONFIG_EMBEDDED -DUSE_IND_THREAD
LOCAL_PRELINK_MODULE:=false
include $(BUILD_SHARED_LIBRARY)
jni 추가한 파일이 a.cpp b.cpp 이고 만들 native library 이름이 hellojni 라고 가정하면 Android.mk 파일은 아래와 같이 만들면 된다.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := a.cpp b.cpp
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
LOCAL_MODULE := libhellojni
LOCAL_SHARED_LIBRARIES := liblog
#LOCAL_CFLAGS := -DCONFIG_EMBEDDED -DUSE_IND_THREAD
LOCAL_PRELINK_MODULE:=false
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := a.cpp b.cpp
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
LOCAL_MODULE := libhellojni
LOCAL_SHARED_LIBRARIES := liblog
#LOCAL_CFLAGS := -DCONFIG_EMBEDDED -DUSE_IND_THREAD
LOCAL_PRELINK_MODULE:=false
include $(BUILD_SHARED_LIBRARY)
이렇게 한 후에 build 하게 되면 LOCAL_MODULE 에서 정해진 이름으로 so 파일이 생성된다.
'IT 기술 > Android' 카테고리의 다른 글
Android Log 분석 (0) | 2012.01.19 |
---|---|
JNI 를 사용한 간단한 Android Project (0) | 2011.12.22 |
[Android] static library를 사용하여 shared library 만들기 (0) | 2011.08.10 |