안드로이드 개발 질문/답변
(글 수 40,700)
안녕하세요?
항상 많은 도움을 받고 있습니다. 한가지 또 질문드립니다.
Developer site에 보면, 아래와 같이 NDK에 대해서 부분적인 제약이 있다는거 같습니다.
It provides a set of system headers for stable native APIs that are guaranteed to be supported in all later releases of the platform:
* libc (C library) headers
* libm (math library) headers
* JNI interface headers
* libz (Zlib compression) headers
* liblog (Android logging) header
* A Minimal set of headers for C++ support
그리고 릴리즈된 NDK소스에 보면 two-libs 예제가 있습니다.
first.c를 build해서 static library인 libtwolib-first.a을 생성하고,
second.c를 build해서 libtwolib-second.so을 생성하게 됩니다.
Main 기능은 first.c에 위치하여 static library에 포함되고 이 static library에 있는 function을 second.c로 생성된
Dynamic Library(.so)에서 사용하고 있습니다.
Java Application 쪽에서는 second.c로 생성된 libtwolib-second.so를
System.loadLibrary("twolib-second")와 같이 Load해서 사용하고 있습니다.
질문은 아래와 같습니다.
제가 만약 Android Java Application을 개발하는데, Third party에서 제공하는 static library(C나 C++로 구현됨)를 사용해야 합니다.
(* 사실 Third party업체는 Android Platform관련해서 전혀 모릅니다. Android의 NDK의 제약이나 환경에 대해서는 전혀 모르고 있으며
단지 C나 C++ 로 개발한 library를 제공하면 된다고 생각합니다. 소스 open은 당연히 안하구요)
Thidr party에서 제공하는 static library(대략 encryption/decryption, random number 생성, file system access및 기타역할을 함)를
받아서 그 static library에서 제공되는 함수를 제가 만든 dynamic library(.so) 에서 호출해서 연결해서 사용하려고 합니다.
(* NDK의 two-libs 예제처럼요)
1) 이 경우 잠재적으로 문제가 될만한 것이 무엇인지요?
2) Third party library도 NDK환경에서 제공하는 limited library(lib headers, libm headers, libz headers.. 등)와 GNU 3.8.1 이상의 version으로 build해서 release해 달라고 요청하는게 맞을까요?
감사합니다.
항상 많은 도움을 받고 있습니다. 한가지 또 질문드립니다.
Developer site에 보면, 아래와 같이 NDK에 대해서 부분적인 제약이 있다는거 같습니다.
It provides a set of system headers for stable native APIs that are guaranteed to be supported in all later releases of the platform:
* libc (C library) headers
* libm (math library) headers
* JNI interface headers
* libz (Zlib compression) headers
* liblog (Android logging) header
* A Minimal set of headers for C++ support
그리고 릴리즈된 NDK소스에 보면 two-libs 예제가 있습니다.
first.c를 build해서 static library인 libtwolib-first.a을 생성하고,
second.c를 build해서 libtwolib-second.so을 생성하게 됩니다.
Main 기능은 first.c에 위치하여 static library에 포함되고 이 static library에 있는 function을 second.c로 생성된
Dynamic Library(.so)에서 사용하고 있습니다.
Java Application 쪽에서는 second.c로 생성된 libtwolib-second.so를
System.loadLibrary("twolib-second")와 같이 Load해서 사용하고 있습니다.
질문은 아래와 같습니다.
제가 만약 Android Java Application을 개발하는데, Third party에서 제공하는 static library(C나 C++로 구현됨)를 사용해야 합니다.
(* 사실 Third party업체는 Android Platform관련해서 전혀 모릅니다. Android의 NDK의 제약이나 환경에 대해서는 전혀 모르고 있으며
단지 C나 C++ 로 개발한 library를 제공하면 된다고 생각합니다. 소스 open은 당연히 안하구요)
Thidr party에서 제공하는 static library(대략 encryption/decryption, random number 생성, file system access및 기타역할을 함)를
받아서 그 static library에서 제공되는 함수를 제가 만든 dynamic library(.so) 에서 호출해서 연결해서 사용하려고 합니다.
(* NDK의 two-libs 예제처럼요)
1) 이 경우 잠재적으로 문제가 될만한 것이 무엇인지요?
2) Third party library도 NDK환경에서 제공하는 limited library(lib headers, libm headers, libz headers.. 등)와 GNU 3.8.1 이상의 version으로 build해서 release해 달라고 요청하는게 맞을까요?
감사합니다.
2010.01.15 10:53:52
1) 해당 라이브러리리가 어떤 환경에서 만들어졌고 어떤 의존성을 가지고 있을지 모르는게 가장 큰 문제가 아닐까 싶네요.
2) NDK의 제한된 환경에서 빌드가 되야합니다. 라이브러리 뿐만 아니라 컴파일 옵션등도 영향을 끼칠수 있을것 같네요.
그냥 NDK에서 빌드해달라고 하는 것이 제일 속편한 방법이 아닐까 싶습니다만..
2010.01.16 02:58:40
회색님 답변 감사합니다.
추가질문이 하나더 있습니다.
NDK에 보면 "NDK supports the ARMv5TE machine instruction set"라고 되어 있는데요, 혹시 이렇게 빌드해서 만든 apk가 마켓에 올라갔을때, ARM계열의 CPU가 아닌 다른 CPU를 사용하는 device에서 실행할때 혹시 문제가 있을수 있는지요?.
만약 추후 이러한 문제의 소지가 있을수 있다면 사전에 미리 피해가거나 예방할수 있는 방법이 있을까요?
추가질문이 하나더 있습니다.
NDK에 보면 "NDK supports the ARMv5TE machine instruction set"라고 되어 있는데요, 혹시 이렇게 빌드해서 만든 apk가 마켓에 올라갔을때, ARM계열의 CPU가 아닌 다른 CPU를 사용하는 device에서 실행할때 혹시 문제가 있을수 있는지요?.
만약 추후 이러한 문제의 소지가 있을수 있다면 사전에 미리 피해가거나 예방할수 있는 방법이 있을까요?