TERMUX_PKG_HOMEPAGE=https://elinux.org/Android_aapt TERMUX_PKG_DESCRIPTION="Android Asset Packaging Tool" TERMUX_PKG_LICENSE="Apache-2.0" TERMUX_PKG_MAINTAINER="@termux" _TAG_VERSION=7.1.2 _TAG_REVISION=33 TERMUX_PKG_VERSION=${_TAG_VERSION}.${_TAG_REVISION} TERMUX_PKG_REVISION=11 TERMUX_PKG_SKIP_SRC_EXTRACT=true TERMUX_PKG_BUILD_IN_SRC=true TERMUX_PKG_DEPENDS="libc++, libexpat, libpng, libzopfli, zlib" termux_step_pre_configure() { # Certain packages are not safe to build on device because their # build.sh script deletes specific files in $TERMUX_PREFIX. if $TERMUX_ON_DEVICE_BUILD; then termux_error_exit "Package '$TERMUX_PKG_NAME' is not safe for on-device builds." fi } termux_step_make_install() { # FIXME: We would like to enable checksums when downloading # tar files, but they change each time as the tar metadata # differs: https://github.com/google/gitiles/issues/84 local _TAGNAME=${_TAG_VERSION}_r${_TAG_REVISION} SYSTEM_CORE_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/system_core_include_${_TAGNAME}.tar.gz test ! -f $SYSTEM_CORE_INCLUDE_TARFILE && termux_download \ "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/include.tar.gz" \ $SYSTEM_CORE_INCLUDE_TARFILE \ SKIP_CHECKSUM ANDROIDFW_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/androidfw_include_${_TAGNAME}.tar.gz test ! -f $ANDROIDFW_INCLUDE_TARFILE && termux_download \ "https://android.googlesource.com/platform/frameworks/base/+archive/android-$_TAGNAME/include/androidfw.tar.gz" \ $ANDROIDFW_INCLUDE_TARFILE \ SKIP_CHECKSUM ANDROID_BASE_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/android_base_include_${_TAGNAME}.tar.gz test ! -f $ANDROID_BASE_INCLUDE_TARFILE && termux_download \ "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/base/include/android-base.tar.gz" \ $ANDROID_BASE_INCLUDE_TARFILE \ SKIP_CHECKSUM local AOSP_INCLUDE_DIR=$TERMUX_PREFIX/include/aosp mkdir -p $AOSP_INCLUDE_DIR cd $AOSP_INCLUDE_DIR rm -Rf * tar xf $SYSTEM_CORE_INCLUDE_TARFILE mkdir -p androidfw cd androidfw tar xf $ANDROIDFW_INCLUDE_TARFILE cd .. mkdir -p android-base cd android-base tar xf $ANDROID_BASE_INCLUDE_TARFILE cd ../log patch -p0 < $TERMUX_PKG_BUILDER_DIR/log.h.patch.txt CXXFLAGS+=" -fPIC" # Build libcutils: mkdir -p $TERMUX_PKG_SRCDIR/{libcutils,androidfw} cd $TERMUX_PKG_SRCDIR/libcutils LIBCUTILS_TARFILE=$TERMUX_PKG_CACHEDIR/libcutils_${_TAGNAME}.tar.gz test ! -f $LIBCUTILS_TARFILE && termux_download \ "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/libcutils.tar.gz" \ $LIBCUTILS_TARFILE \ SKIP_CHECKSUM tar xf $LIBCUTILS_TARFILE patch -p0 < $TERMUX_PKG_BUILDER_DIR/libcutils-patch.txt $CXX $CXXFLAGS -isystem $AOSP_INCLUDE_DIR -c -o sockets.o sockets.cpp $CXX $CXXFLAGS -isystem $AOSP_INCLUDE_DIR -c -o sockets_unix.o sockets_unix.cpp sed -i 's%include %include %' properties.c # From Android.mk: libcutils_common_sources="\ config_utils.c \ fs_config.c \ canned_fs_config.c \ hashmap.c \ iosched_policy.c \ load_file.c \ native_handle.c \ open_memstream.c \ process_name.c \ record_stream.c \ sched_policy.c \ sockets.o \ strdup16to8.c \ strdup8to16.c \ strlcpy.c \ threads.c" libcutils_nonwindows_sources="\ fs.c \ multiuser.c \ socket_inaddr_any_server_unix.c \ socket_local_client_unix.c \ socket_local_server_unix.c \ socket_loopback_client_unix.c \ socket_loopback_server_unix.c \ socket_network_client_unix.c \ sockets_unix.o \ str_parms.c" # -D_FORTIFY_SOURCE=2 makes debug build fail with: # In file included from process_name.c:29: # /data/data/com.termux/files/usr/include/aosp/cutils/properties.h:116:45: error: expected identifier # __errordecl(__property_get_too_small_error, "property_get() called with too small of a buffer"); # ^ # /data/data/com.termux/files/usr/include/aosp/cutils/properties.h:119:5: error: static declaration of 'property_get' follows non-static declaration # int property_get(const char *key, char *value, const char *default_value) { # ^ # /data/data/com.termux/files/usr/include/aosp/cutils/properties.h:46:5: note: previous declaration is here # int property_get(const char *key, char *value, const char *default_value); $CC ${CFLAGS/-D_FORTIFY_SOURCE=2/} \ $LDFLAGS \ -Dchar16_t=uint16_t \ -std=c11 \ -isystem $AOSP_INCLUDE_DIR \ $libcutils_common_sources \ $libcutils_nonwindows_sources \ trace-host.c \ properties.c \ -llog \ -shared \ -o $TERMUX_PREFIX/lib/libandroid-cutils.so # Build libutil: local LIBUTILS_TARFILE=$TERMUX_PKG_CACHEDIR/libutils_${_TAGNAME}.tar.gz test ! -f $LIBUTILS_TARFILE && termux_download \ "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/libutils.tar.gz" \ $LIBUTILS_TARFILE \ SKIP_CHECKSUM local SAFE_IOP_TARFILE=$TERMUX_PKG_CACHEDIR/safe_iop.tar.gz test ! -f $SAFE_IOP_TARFILE && termux_download \ https://android.googlesource.com/platform/external/safe-iop/+archive/cd76f998688d145235de78ecd5b340d0eac9239d.tar.gz \ $SAFE_IOP_TARFILE \ SKIP_CHECKSUM local SAFE_IOP_DIR=$TERMUX_PKG_TMPDIR/safe-iop mkdir -p $SAFE_IOP_DIR cd $SAFE_IOP_DIR tar xf $SAFE_IOP_TARFILE mv src/safe_iop.c src/safe_iop.cpp mkdir $TERMUX_PKG_SRCDIR/libutils cd $TERMUX_PKG_SRCDIR/libutils tar xf $LIBUTILS_TARFILE # From Android.mk: #CallStack.cpp \ #SystemClock.cpp \ commonSources="\ FileMap.cpp \ JenkinsHash.cpp \ LinearTransform.cpp \ Log.cpp \ NativeHandle.cpp \ Printer.cpp \ PropertyMap.cpp \ RefBase.cpp \ SharedBuffer.cpp \ Static.cpp \ StopWatch.cpp \ String8.cpp \ String16.cpp \ Threads.cpp \ Timers.cpp \ Tokenizer.cpp \ Unicode.cpp \ VectorImpl.cpp \ misc.cpp" $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS \ -std=c++11 \ '-DALOG_ASSERT(a,...)=' \ -Dtypeof=decltype \ -isystem $TERMUX_PREFIX/include/aosp \ -isystem $SAFE_IOP_DIR/include \ $SAFE_IOP_DIR/src/safe_iop.cpp \ $commonSources \ -landroid-cutils \ -llog \ -shared \ -o $TERMUX_PREFIX/lib/libandroid-utils.so # Build libbase: local LIBBASE_TARFILE=$TERMUX_PKG_CACHEDIR/libbase_${_TAGNAME}.tar.gz test ! -f $LIBBASE_TARFILE && termux_download \ "https://android.googlesource.com/platform/system/core/+archive/android-${_TAGNAME}/base.tar.gz" \ $LIBBASE_TARFILE \ SKIP_CHECKSUM mkdir -p $TERMUX_PKG_SRCDIR/libbase cd $TERMUX_PKG_SRCDIR/libbase tar xf $LIBBASE_TARFILE rm -Rf $TERMUX_PREFIX/include/aosp/android-base mv include/android-base $TERMUX_PREFIX/include/aosp patch -p1 < $TERMUX_PKG_BUILDER_DIR/libbase-patch.txt #logging.cpp \ libbase_src_files="\ file.cpp \ parsenetaddress.cpp \ stringprintf.cpp \ strings.cpp \ test_utils.cpp" libbase_linux_src_files="\ errors_unix.cpp" # __USE_BSD for DEFFILEMODE to be defined by . $CXX $CXXFLAGS $CPPFLAGS \ $LDFLAGS \ -std=c++11 \ -include memory \ -D__USE_BSD \ -isystem $AOSP_INCLUDE_DIR \ $libbase_src_files $libbase_linux_src_files \ -llog \ -shared \ -o $TERMUX_PREFIX/lib/libandroid-base.so # Build libziparchive: LIBZIPARCHIVE_TARFILE=$TERMUX_PKG_CACHEDIR/libziparchive_${_TAGNAME}.tar.gz test ! -f $LIBZIPARCHIVE_TARFILE && termux_download \ "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/libziparchive.tar.gz" \ $LIBZIPARCHIVE_TARFILE \ SKIP_CHECKSUM mkdir -p $TERMUX_PKG_SRCDIR/libziparchive cd $TERMUX_PKG_SRCDIR/libziparchive tar xf $LIBZIPARCHIVE_TARFILE libziparchive_source_files="\ zip_archive.cc \ zip_archive_stream_entry.cc \ zip_writer.cc" patch -p0 < $TERMUX_PKG_BUILDER_DIR/libziparchive.patch.txt $CXX $CPPFLAGS $CXXFLAGS $LDFLAGS -std=c++11 \ -DZLIB_CONST \ -isystem $AOSP_INCLUDE_DIR \ $libziparchive_source_files \ -landroid-base \ -landroid-utils \ -lz \ -llog \ -shared \ -o $TERMUX_PREFIX/lib/libandroid-ziparchive.so # Build libandroidfw: ANDROIDFW_TARFILE=$TERMUX_PKG_CACHEDIR/androidfw_${_TAGNAME}.tar.gz test ! -f $ANDROIDFW_TARFILE && termux_download \ https://android.googlesource.com/platform/frameworks/base/+archive/android-$_TAGNAME/libs/androidfw.tar.gz \ $ANDROIDFW_TARFILE \ SKIP_CHECKSUM mkdir -p $TERMUX_PKG_SRCDIR/androidfw cd $TERMUX_PKG_SRCDIR/androidfw tar xf $ANDROIDFW_TARFILE commonSources="\ Asset.cpp \ AssetDir.cpp \ AssetManager.cpp \ LocaleData.cpp \ misc.cpp \ ObbFile.cpp \ ResourceTypes.cpp \ StreamingZipInflater.cpp \ TypeWrappers.cpp \ ZipFileRO.cpp \ ZipUtils.cpp" sed -i 's%#include %%' ResourceTypes.cpp $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -isystem $AOSP_INCLUDE_DIR \ -std=c++11 \ -include memory \ $commonSources \ -landroid-cutils \ -landroid-utils \ -landroid-ziparchive \ -llog \ -lz \ -shared \ -o $TERMUX_PREFIX/lib/libandroid-fw.so # Build aapt: AAPT_TARFILE=$TERMUX_PKG_CACHEDIR/aapt_${_TAGNAME}.tar.gz test ! -f $AAPT_TARFILE && termux_download \ "https://android.googlesource.com/platform/frameworks/base/+archive/android-$_TAGNAME/tools/aapt.tar.gz" \ $AAPT_TARFILE \ SKIP_CHECKSUM mkdir $TERMUX_PKG_SRCDIR/aapt cd $TERMUX_PKG_SRCDIR/aapt tar xf $AAPT_TARFILE sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $TERMUX_PKG_BUILDER_DIR/aapt-Main.cpp.patch.txt | patch -p1 $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS \ -std=c++11 \ -include memory \ -DANDROID_SMP=1 \ -DNDEBUG=1 \ -DHAVE_ENDIAN_H=1 -DHAVE_POSIX_FILEMAP=1 -DHAVE_OFF64_T=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_PTHREADS=1 \ -isystem $AOSP_INCLUDE_DIR \ *.cpp \ -landroid-cutils -landroid-utils -landroid-fw -landroid-ziparchive \ -llog \ -lm -lz -lpng -lexpat \ -pie \ -o $TERMUX_PREFIX/bin/aapt # Build zipalign: ZIPALIGN_TARFILE=$TERMUX_PKG_CACHEDIR/zipalign_${_TAGNAME}.tar.gz ZOPFLI_VER=$(bash -c ". $TERMUX_SCRIPTDIR/packages/libzopfli/build.sh; echo \$TERMUX_PKG_VERSION") ZOPFLI_SHA256=$(bash -c ". $TERMUX_SCRIPTDIR/packages/libzopfli/build.sh; echo \$TERMUX_PKG_SHA256") ZOPFLI_TARFILE=$TERMUX_PKG_CACHEDIR/zopfli-${ZOPFLI_VER}.tar.gz termux_download \ "https://github.com/google/zopfli/archive/zopfli-${ZOPFLI_VER}.tar.gz" \ $ZOPFLI_TARFILE \ $ZOPFLI_SHA256 test ! -f $ZIPALIGN_TARFILE && termux_download \ "https://android.googlesource.com/platform/build.git/+archive/android-$_TAGNAME/tools/zipalign.tar.gz" \ $ZIPALIGN_TARFILE \ SKIP_CHECKSUM mkdir $TERMUX_PKG_SRCDIR/zipalign cd $TERMUX_PKG_SRCDIR/zipalign tar xf $ZIPALIGN_TARFILE tar xf $ZOPFLI_TARFILE mv zopfli-zopfli-$ZOPFLI_VER zopfli $CXX $CXXFLAGS $CPPFLAGS -Izopfli/src $LDFLAGS \ -isystem $AOSP_INCLUDE_DIR \ -std=c++11 \ ZipAlign.cpp ZipEntry.cpp ZipFile.cpp \ -landroid-cutils -landroid-utils -landroid-fw \ -lm -lz -llog \ -lzopfli \ -pie \ -o $TERMUX_PREFIX/bin/zipalign # Remove this one for now: rm -Rf $AOSP_INCLUDE_DIR # Create an android.jar with AndroidManifest.xml and resources.arsc: cd $TERMUX_PKG_TMPDIR rm -rf android-jar mkdir android-jar cd android-jar cp $ANDROID_HOME/platforms/android-28/android.jar . unzip -q android.jar mkdir -p $TERMUX_PREFIX/share/aapt jar cfM $TERMUX_PREFIX/share/aapt/android.jar AndroidManifest.xml resources.arsc }