| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- POCO C++ Libraries Android Platform Notes
- AAAIntroduction
- !!!Introduction
- Starting with release 1.4.2 the POCO C++ Libraries can be used on
- Android, using the NDK r6. The gmake-based build system (also used
- for Mac OS X, Linux, etc.) is used to build the libraries.
- A standalone "customized" toolchain for Android (see below) is required.
- !!!Requirements
- !!Standalone Toolchain
- Please refer to the Android NDK Dev Guide document "Standalone Toolchain", section 3,
- (<*docs/STANDALONE-TOOLCHAIN.html*>) for instructions how to create a customized toolchain.
- Typically, you'll run a command like:
- $NDK/build/tools/make-standalone-toolchain.sh --platform=android-8 --install-dir=$HOME/my-android-toolchain
- ----
- Then, add the directory containing the toolchain executables to your <[$PATH]>:
- export PATH=$PATH:$HOME/my-android-toolchain/bin
- ----
- !!Compiling the POCO C++ Libraries
- When compiling the POCO C++ Libraries for a Android target, as well as
- when including POCO C++ Libraries headers in a project for a Android
- target, the preprocessor macro <[POCO_ANDROID]> must be defined. This is
- because the Android NDK GCC compiler does not provide a predefined macro that
- allows for reliable detection of an Android target.
- !!!Restrictions
- For the most part, the Linux and Android ports of the POCO C++ Libraries are very similar.
- However, there are a few restrictions due to the Binoic C library used by Android.
- !!Poco::NamedEvent and Poco::NamedMutex
- These classes are not supported on Android. While Poco::NamedEvent and
- Poco::NamedMutex objects can be created, any attempt to call a method
- of these classes will result in a Poco::NotImplementedException being thrown.
- !!Poco::SharedMemory
- Shared memory is not supported on Android.
- !!Poco::FPEnvironment
- The Poco::FPEnvironment class is not available on Android and
- cannot be used.
-
- !!Poco::RWLock
- On Android, Poco::RWLock is an ordinary mutex.
- !!!Build Notes
- !!Using POCO's GNU Make-based Build System
- The <*Android*> build configuration (located in <*$POCO_BASE/build/config/Android*>)
- is used to cross-build for Android from a Linux or Mac OS X host.
- To build the POCO C++ Libraries (static) on a Linux or Mac OS X host:
- ./configure --config=Android --no-samples --no-tests
- ./make -s -j4
- ----
- The default configuration builds for the <*armeabi*> platform ABI. To build for
- <*armeabi-v7a*>, set the <[ANDROID_ABI]> make variable to <[armeabi-v7a]>:
- ./make -s -j4 ANDROID_ABI=armeabi-v7a
- ----
- The build configuration also supports setting the <[ANDROID_ABI]> to <[x86]>,
- but the NDK r6 standalone toolchain for x86 generated by <*make-standalone-toolchain.sh*>
- lacks the C++ STL headers, so this does not work.
- Depending on your specific requirements (e.g., no ARM architecture, etc.), it may be necessary
- to modify the Android build configuration, or create a new one based on it.
- See the [[99150-GMakeBuildNotes.html GNU Make Build System]] document for more information.
- !!Using Android's Build System
- Alternatively to POCO's build system, Android's build system can be used to build the
- POCO C++ Libraries. A sample makefile for the Foundation library is shown below.
- #
- # Android.mk
- #
- # POCO Foundation
- #
-
- include $(CLEAR_VARS)
-
- LOCAL_MODULE := PocoFoundation
- LOCAL_PATH := $(call my-dir)/src
- LOCAL_CFLAGS := -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY
- LOCAL_CPPFLAGS := -frtti -fexceptions
- LOCAL_C_INCLUDES := $(call my-dir)/include
-
- LOCAL_SRC_FILES := \
- AbstractObserver.cpp \
- ActiveDispatcher.cpp \
- adler32.c \
- ArchiveStrategy.cpp \
- Ascii.cpp \
- ASCIIEncoding.cpp \
- AsyncChannel.cpp \
- AtomicCounter.cpp \
- Base64Decoder.cpp \
- Base64Encoder.cpp \
- BinaryReader.cpp \
- BinaryWriter.cpp \
- Bugcheck.cpp \
- ByteOrder.cpp \
- Channel.cpp \
- Checksum.cpp \
- compress.c \
- Condition.cpp \
- Configurable.cpp \
- ConsoleChannel.cpp \
- CountingStream.cpp \
- crc32.c \
- DateTime.cpp \
- DateTimeFormat.cpp \
- DateTimeFormatter.cpp \
- DateTimeParser.cpp \
- Debugger.cpp \
- deflate.c \
- DeflatingStream.cpp \
- DigestEngine.cpp \
- DigestStream.cpp \
- DirectoryIterator.cpp \
- DynamicAny.cpp \
- DynamicAnyHolder.cpp \
- Environment.cpp \
- ErrorHandler.cpp \
- Event.cpp \
- EventArgs.cpp \
- Exception.cpp \
- File.cpp \
- FileChannel.cpp \
- FileStream.cpp \
- FileStreamFactory.cpp \
- Format.cpp \
- Formatter.cpp \
- FormattingChannel.cpp \
- FPEnvironment.cpp \
- Glob.cpp \
- gzio.c \
- Hash.cpp \
- HashStatistic.cpp \
- HexBinaryDecoder.cpp \
- HexBinaryEncoder.cpp \
- infback.c \
- inffast.c \
- inflate.c \
- InflatingStream.cpp \
- inftrees.c \
- Latin1Encoding.cpp \
- Latin9Encoding.cpp \
- LineEndingConverter.cpp \
- LocalDateTime.cpp \
- LogFile.cpp \
- Logger.cpp \
- LoggingFactory.cpp \
- LoggingRegistry.cpp \
- LogStream.cpp \
- Manifest.cpp \
- MD2Engine.cpp \
- MD4Engine.cpp \
- MD5Engine.cpp \
- MemoryPool.cpp \
- MemoryStream.cpp \
- Message.cpp \
- Mutex.cpp \
- NestedDiagnosticContext.cpp \
- Notification.cpp \
- NotificationCenter.cpp \
- NotificationQueue.cpp \
- NullChannel.cpp \
- NullStream.cpp \
- NumberFormatter.cpp \
- NumberParser.cpp \
- Path.cpp \
- PatternFormatter.cpp \
- pcre_chartables.c \
- pcre_compile.c \
- pcre_exec.c \
- pcre_fullinfo.c \
- pcre_globals.c \
- pcre_maketables.c \
- pcre_newline.c \
- pcre_ord2utf8.c \
- pcre_study.c \
- pcre_tables.c \
- pcre_try_flipped.c \
- pcre_ucd.c \
- pcre_valid_utf8.c \
- pcre_xclass.c \
- Pipe.cpp \
- PipeImpl.cpp \
- PipeStream.cpp \
- PriorityNotificationQueue.cpp \
- Process.cpp \
- PurgeStrategy.cpp \
- Random.cpp \
- RandomStream.cpp \
- RefCountedObject.cpp \
- RegularExpression.cpp \
- RotateStrategy.cpp \
- Runnable.cpp \
- RWLock.cpp \
- Semaphore.cpp \
- SHA1Engine.cpp \
- SharedLibrary.cpp \
- SharedMemory.cpp \
- SignalHandler.cpp \
- SimpleFileChannel.cpp \
- SplitterChannel.cpp \
- Stopwatch.cpp \
- StreamChannel.cpp \
- StreamConverter.cpp \
- StreamCopier.cpp \
- StreamTokenizer.cpp \
- String.cpp \
- StringTokenizer.cpp \
- SynchronizedObject.cpp \
- SyslogChannel.cpp \
- Task.cpp \
- TaskManager.cpp \
- TaskNotification.cpp \
- TeeStream.cpp \
- TemporaryFile.cpp \
- TextBufferIterator.cpp \
- TextConverter.cpp \
- TextEncoding.cpp \
- TextIterator.cpp \
- Thread.cpp \
- ThreadLocal.cpp \
- ThreadPool.cpp \
- ThreadTarget.cpp \
- TimedNotificationQueue.cpp \
- Timer.cpp \
- Timespan.cpp \
- Timestamp.cpp \
- Timezone.cpp \
- Token.cpp \
- trees.c \
- UnicodeConverter.cpp \
- Unicode.cpp \
- URI.cpp \
- URIStreamFactory.cpp \
- URIStreamOpener.cpp \
- UTF8Encoding.cpp \
- UTF8String.cpp \
- UTF16Encoding.cpp \
- UUID.cpp \
- UUIDGenerator.cpp \
- Void.cpp \
- Windows1252Encoding.cpp \
- zutil.c
-
- include $(BUILD_STATIC_LIBRARY)
- ----
|