下载android的ndk与sdk。自己网上找下。我用的NDK为android-ndk-r15c
生成工具链$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/home/sukaarch、install-dir与platform根据实际选。$NDK为NDK的目录
下载xbmc并切换到avahi分支git clone https://github.com/theuni/xbmc.gitgit checkout remotes/origin/android-avahigit checkout -b android-avahicd xbmc/tools/android/depends
修改configure.in,找到zipalign,修成对应sdk的zipalign路径如:if [ ! test -f $use_sdk/build-tools/27.0.3/zipalign ]; then
修改Makefile.in的SUBDIRS ,只编译我们需要的: SUBDIRS = \ expat libcap dbus libcap libdaemon avahi
修改Makefile.include.in ,修改gcc与g++export CC=$(CROSSTOOLS)clangexport CXX=$(CROSSTOOLS)clang++
autoconf版本换高的。修改autoconf/MakefileVERSION=2.69
automake版本换高的。修改 automake/MakefileVERSION=1.15 SOURCE=$(LIBNAME)-$(VERSION) ARCHIVE=$(SOURCE).tar.gzBASE_URL=https://ftp.gnu.org/gnu/automake/
修改avahi/0001-Add-Android-support.patch,注释掉in6_pktinfo +#if 0 //def __BIONIC__+struct in6_pktinfo {+ struct in6_addr ipi6_addr;+ int ipi6_ifindex;+};+#endif修改avahi/0001-Add-Android-support.patch, sys/_types.h改
修改avahi/Makefile,增加版本VERSION=0.6.32CONFIGURE增加 --disable-glib \ --disable-gobject \ --enable-compat-libdns_sd \ LIBS='-llog -lc' \ CFLAGS='-pie -fPIE' \同时删除--disable-shared
修改dbus/Makefile,换高版本,如下include ../Makefile.includeDEPS= ../Makefile.include Makefile# lib name, versionLIBNAME=dbusVERSION=1.13.4SOURCE=$(LIBNAME)-$(VERSION)ARCHIVE=$(SOURCE).tar.gzBASE_URL=http://dbus.freedesktop.org/releases/dbus# configuration settingsCONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) .; \ ./configure --prefix=$(PREFIX) --host=$(HOST) \ --without-x --disable-xml-docs --disable-doxygen-docs \ --with-dbus-user=root CFLAGS='-pie -fPIE' \LIBDYLIB=$(PLATFORM)/$(LIBNAME)/.libs/libdbus-1.aCLEAN_FILES=$(ARCHIVE) $(PLATFORM)all: .installed-$(PLATFORM)$(TARBALLS_LOCATION)/$(ARCHIVE): $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS) rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) #cd $(PLATFORM); patch -p1 < ../android-upstream.patch #cd $(PLATFORM); patch -p1 < ../android.patch cd $(PLATFORM); $(CONFIGURE)$(LIBDYLIB): $(PLATFORM) sed -i '/^#define HAVE_POSIX_GETPWNAM_R/d' $(PLATFORM)/config.h $(MAKE) -C $(PLATFORM)/.installed-$(PLATFORM): $(LIBDYLIB) $(MAKE) -C $(PLATFORM)/ install cp $(PLATFORM)/dbus-1.pc $(PKG_CONFIG_PATH) touch $@clean: $(MAKE) -C $(PLATFORM) clean rm -f .installed-$(PLATFORM)distclean:: rm -rf $(PLATFORM) .installed-$(PLATFORM)
修改expat/Makefile,增加版本VERSION=2.2.5 SOURCE=$(LIBNAME)-$(VERSION)ARCHIVE=$(SOURCE).tar.bz2BASE_URL=https://jaist.dl.sourceforge.net/project/expat/expat/2.2.5
生成configure 并执行./bootstrap./configure --prefix=/etc/android --host=arm-linux-androideabi \--with-ndk=/home/suka/android-ndk-r15c --with-sdk=/home/suka/android-sdk-linux \--with-sdk-platform=android-21 --with-tarballs=pack --with-toolchain=/home/suka/arm-linux-androideabi --with-staging=/etc/android \CC=/home/suka/arm-linux-androideabi/bin/clang CFLAGS='-pie -fPIE'其中,prefix与with-staging要和安卓的目录一致。with-sdk-platform为要用的sdk版本
创建libcap目录,里面增加Makefile,内容如下include ../Makefile.includeDEPS= ../Makefile.include# lib name, versionLIBNAME=libcapVERSION=2.25SOURCE=$(LIBNAME)-$(VERSION)ARCHIVE=$(SOURCE).tar.gzBASE_URL=https://mirrors.edge.kernel.org/pub/linux/libs/security/linux-privs/libcap2# configuration settingsCONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) .; \ ./configure --prefix=$(PREFIX) --host=$(HOST) --without-cd-drive --without-cd-info --without-cd-paranoia \ --without-cdda-player --without-cd-read --without-iso-info --without-iso-read --disable-example-progs \ --disable-cpp-progs --without-cd-drive --without-cd-info --without-cd-paranoia --without-cdda-player \ --without-cd-read --without-iso-info --without-iso-read --disable-sharedLIBDYLIB=$(PLATFORM)/lib/driver/.libs/$(LIBNAME).aCLEAN_FILES=$(ARCHIVE) $(PLATFORM)all: .installed-$(PLATFORM)$(TARBALLS_LOCATION)/$(ARCHIVE): $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS) rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) sed -i 's/-\/sbin\/ldconfig//' $(PLATFORM)/libcap/Makefile $(LIBDYLIB): $(PLATFORM) $(MAKE) -C $(PLATFORM)/libcap lib=lib prefix=$(PREFIX) CC=$(CC).installed-$(PLATFORM): $(LIBDYLIB) $(MAKE) -C $(PLATFORM)/libcap install lib=lib prefix=$(PREFIX) CC=$(CC) touch $@clean: $(MAKE) -C $(PLATFORM)/libcap clean rm -f .installed-$(PLATFORM)进入libcap,执行make.如出现下面错误./_makenames: 1: ./_makenames: Syntax error: word unexpected (expecting ')')修改armeabi-v7a/libcap/Makefile把_makenames: _makenames.c cap_names.list.h $(BUILD_CC) $(BUILD_CFLAGS) $< -o $@改成_makenames: _makenames.c cap_names.list.h gcc $(BUILD_CFLAGS) $< -o $@
退到depends执行makemake
生成的/etc/android/armeabi-v7a,都上传到系统中。在安卓上,运行mkdir -p /etc/android/armeabi-v7a/var/run/dbusdbus-daemon --system &avahi-daemon --no-chroot &