mirror of
				https://github.com/pocoproject/poco.git
				synced 2025-10-29 12:18:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			277 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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)
 | |
| ----
 | 
