多语言展示
当前在线:1909今日阅读:84今日分享:32

android编译avahi

为了在安卓上使用mDNS,avahi c库官方不支持安卓,找到了xbmc,有用到avahi,所以现依赖xbmc来编译出avahi
方法
1

下载android的ndk与sdk。自己网上找下。我用的NDK为android-ndk-r15c

2

生成工具链$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/home/sukaarch、install-dir与platform根据实际选。$NDK为NDK的目录

3

下载xbmc并切换到avahi分支git clone https://github.com/theuni/xbmc.gitgit checkout remotes/origin/android-avahigit checkout -b  android-avahicd xbmc/tools/android/depends

4

修改configure.in,找到zipalign,修成对应sdk的zipalign路径如:if [ ! test -f $use_sdk/build-tools/27.0.3/zipalign ]; then

5

修改Makefile.in的SUBDIRS ,只编译我们需要的: SUBDIRS = \   expat libcap dbus libcap libdaemon avahi

6

修改Makefile.include.in ,修改gcc与g++export CC=$(CROSSTOOLS)clangexport CXX=$(CROSSTOOLS)clang++

7

autoconf版本换高的。修改autoconf/MakefileVERSION=2.69

8

automake版本换高的。修改 automake/MakefileVERSION=1.15 SOURCE=$(LIBNAME)-$(VERSION) ARCHIVE=$(SOURCE).tar.gzBASE_URL=https://ftp.gnu.org/gnu/automake/

10

修改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改+#include 修改avahi/0001-Add-Android-support.patch,注释掉size_t+#if 0//ndef    _SIZE_T_DECLARED+typedef        __size_t        size_t;+#define        _SIZE_T_DECLARED+#endif修改avahi/0001-Add-Android-support.patch,释放GLOB_ERR定义+#if 1//__POSIX_VISIBLE >= 199209+/* Believed to have been introduced in 1003.2-1992 */+#define        GLOB_APPEND     0x0001  /* Append to output from previous call. */+#define        GLOB_DOOFFS     0x0002  /* Use gl_offs. */修改avahi/0001-Add-Android-support.patch,释放GLOB_LIMIT定义+#if 1// __BSD_VISIBLE+#define        GLOB_ALTDIRFUNC 0x0040  /* Use alternately specified directory funcs. */+#define        GLOB_BRACE      0x0080  /* Expand braces ala csh. */修改avahi/0001-Add-Android-support.patch,将ARG_MAX替换为limit = sysconf(_SC_ARG_MAX);删除掉issetugid的调用issetugid() != 0 ||

11

修改avahi/Makefile,增加版本VERSION=0.6.32CONFIGURE增加 --disable-glib \ --disable-gobject \ --enable-compat-libdns_sd \ LIBS='-llog -lc' \ CFLAGS='-pie -fPIE' \同时删除--disable-shared

12

修改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)

13

修改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

14

生成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版本

15

创建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 $@

16

退到depends执行makemake

17

生成的/etc/android/armeabi-v7a,都上传到系统中。在安卓上,运行mkdir -p /etc/android/armeabi-v7a/var/run/dbusdbus-daemon --system &avahi-daemon  --no-chroot &

推荐信息