From 5d4c2897b76a49374dc5e95aaf114db8b88b807d Mon Sep 17 00:00:00 2001 From: "Hoa V. DINH" Date: Sat, 6 Dec 2014 22:53:16 -0800 Subject: Build for Android --- build-android/.gitignore | 3 ++ build-android/README.md | 11 +++++++ build-android/build.sh | 71 ++++++++++++++++++++++++++++++++++++++++++++ build-android/jni/Android.mk | 64 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 build-android/.gitignore create mode 100644 build-android/README.md create mode 100755 build-android/build.sh create mode 100644 build-android/jni/Android.mk (limited to 'build-android') diff --git a/build-android/.gitignore b/build-android/.gitignore new file mode 100644 index 00000000..725c6cf4 --- /dev/null +++ b/build-android/.gitignore @@ -0,0 +1,3 @@ +third-party +include +mailcore2-android-*.zip diff --git a/build-android/README.md b/build-android/README.md new file mode 100644 index 00000000..03d415b1 --- /dev/null +++ b/build-android/README.md @@ -0,0 +1,11 @@ +## Build instruction for Android ## + +``` +$ export ANDROID_NDK=/path/to/android-ndk +$ cd build-android +$ ./build.sh +``` + +It will produce the following binaries: + +- mailcore2-android-*version*.zip diff --git a/build-android/build.sh b/build-android/build.sh new file mode 100755 index 00000000..8851314f --- /dev/null +++ b/build-android/build.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +build_version=1 +ANDROID_PLATFORM=android-21 +archs="armeabi armeabi-v7a x86 x86_64" +package_name=mailcore2-android +ctemplate_build_version=1 +icu4c_build_version=1 +libetpan_build_version=1 +libxml2_build_version=1 +uchardet_build_version=1 +tidy_html5_build_version=1 +openssl_build_version=1 + +current_dir="`pwd`" + +if test "x$ANDROID_NDK" = x ; then + echo should set ANDROID_NDK before running this script. + exit 1 +fi + +function download_dep { + name="$1" + version="$2" + if test ! -f "$current_dir/third-party/$name-$version.zip" ; then + if curl -f -O "http://d.etpan.org/mailcore2-deps/$name/$name-$version.zip" ; then + unzip "$name-$version.zip" + else + echo Could not download $name-$version.zip + exit 1 + fi + fi +} + +function build { + rm -rf "$current_dir/obj" + + cd "$current_dir/jni" + $ANDROID_NDK/ndk-build TARGET_PLATFORM=$ANDROID_PLATFORM TARGET_ARCH_ABI=$TARGET_ARCH_ABI \ + CTEMPLATE_PATH=$current_dir/third-party/ctemplate-android-1 \ + ICU4C_PATH=$current_dir/third-party/icu4c-android-1 \ + LIBETPAN_PATH=$current_dir/third-party/libetpan-android-1 \ + LIBXML2_PATH=$current_dir/third-party/libxml2-android-1 \ + UCHARDET_PATH=$current_dir/third-party/uchardet-android-1 \ + TIDY_HTML5_PATH=$current_dir/third-party/tidy-html5-android-1 \ + OPENSSL_PATH=$current_dir/third-party/openssl-android-1 + + mkdir -p "$current_dir/$package_name-$build_version/libs/$TARGET_ARCH_ABI" + cp "$current_dir/obj/local/$TARGET_ARCH_ABI/libMailCore.a" "$current_dir/$package_name-$build_version/libs/$TARGET_ARCH_ABI" + rm -rf "$current_dir/obj" +} + +mkdir -p "$current_dir/third-party" +cd "$current_dir/third-party" +download_dep "ctemplate-android" $ctemplate_build_version +download_dep "icu4c-android" $icu4c_build_version +download_dep "libetpan-android" $libetpan_build_version +download_dep "libxml2-android" $libxml2_build_version +download_dep "uchardet-android" $uchardet_build_version +download_dep "tidy-html5-android" $tidy_html5_build_version +download_dep "openssl-android" $openssl_build_version + +# Start building. +for arch in $archs ; do + TARGET_ARCH_ABI=$arch + build +done + +cd "$current_dir" +zip -qry "$package_name-$build_version.zip" "$package_name-$build_version" +rm -rf "$package_name-$build_version" diff --git a/build-android/jni/Android.mk b/build-android/jni/Android.mk new file mode 100644 index 00000000..dee660ec --- /dev/null +++ b/build-android/jni/Android.mk @@ -0,0 +1,64 @@ +CURRENT_DIR := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := MailCore + +src_dir := $(CURRENT_DIR)/../../src +subdirs = \ + core \ + core/basetypes \ + core/abstract \ + core/imap \ + core/nntp \ + core/pop \ + core/provider \ + core/renderer \ + core/rfc822 \ + core/security \ + core/smtp \ + core/zip \ + core/zip/MiniZip +LOCAL_C_INCLUDES := \ + $(CURRENT_DIR)/../include \ + $(CTEMPLATE_PATH)/include \ + $(ICU4C_PATH)/include \ + $(LIBETPAN_PATH)/include \ + $(LIBXML2_PATH)/include \ + $(UCHARDET_PATH)/include \ + $(TIDY_HTML5_PATH)/include \ + $(OPENSSL_PATH)/include \ + $(ANDROID_NDK)/sources/cxx-stl/llvm-libc++/libcxx/include \ + $(ANDROID_NDK)/sources/cxx-stl/llvm-libc++abi/libcxxabi/include \ + $(addprefix $(src_dir)/, $(subdirs)) +core_excludes = MCWin32.cpp MCStringWin32.cpp MCMainThreadWin32.cpp MCMainThreadGTK.cpp +core_src_files := $(filter-out \ + $(addprefix $(src_dir)/core/basetypes/, $(core_excludes)), \ + $(wildcard $(src_dir)/core/basetypes/*.cpp) $(wildcard $(src_dir)/core/basetypes/*.c)) +abstract_src_files := $(wildcard $(src_dir)/core/abstract/*.cpp) +imap_src_files := $(wildcard $(src_dir)/core/imap/*.cpp) +nntp_src_files := $(wildcard $(src_dir)/core/nntp/*.cpp) +pop_src_files := $(wildcard $(src_dir)/core/pop/*.cpp) +provider_src_files := $(wildcard $(src_dir)/core/provider/*.cpp) +renderer_src_files := $(wildcard $(src_dir)/core/renderer/*.cpp) +rfc822_src_files := $(wildcard $(src_dir)/core/rfc822/*.cpp) +security_src_files := $(wildcard $(src_dir)/core/security/*.cpp) +smtp_src_files := $(wildcard $(src_dir)/core/smtp/*.cpp) +zip_src_files := $(wildcard $(src_dir)/core/zip/*.cpp) +minizip_src_files := \ + $(src_dir)/core/zip/MiniZip/ioapi.c \ + $(src_dir)/core/zip/MiniZip/unzip.c \ + $(src_dir)/core/zip/MiniZip/zip.c +async_imap_src_files := $(wildcard $(src_dir)/async/imap/*.cpp) +async_nntp_src_files := $(wildcard $(src_dir)/async/nntp/*.cpp) +async_pop_src_files := $(wildcard $(src_dir)/async/pop/*.cpp) +async_smtp_src_files := $(wildcard $(src_dir)/async/smtp/*.cpp) + +LOCAL_SRC_FILES := $(core_src_files) $(abstract_src_files) $(imap_src_files) $(nntp_src_files) \ + $(pop_src_files) $(provider_src_files) $(renderer_src_files) $(rfc822_src_files) \ + $(security_src_files) $(smtp_src_files) $(zip_src_files) $(minizip_src_files) \ + $(async_imap_src_files) $(async_nntp_src_files) $(async_pop_src_files) $(async_smtp_src_files) +LOCAL_CPPFLAGS := -frtti +LOCAL_CFLAGS := -DNOCRYPT + +include $(BUILD_STATIC_LIBRARY) -- cgit v1.2.3