【问题标题】:How to compile Android's mdnsresponder如何编译Android的mdnsresponder
【发布时间】:2022-01-17 03:04:27
【问题描述】:

我想更改我的 Android 手机从 Android 广播的主机名。从this answer,我发现我必须编辑https://android.googlesource.com/platform/external/mdnsresponder的源代码。我做到了,现在我该如何编译它?根目录和mDNSPosix 中的make 都不起作用。

编辑:我试过 soong_build -b test -l Android.bp -o Android.ninja Android.bp 但它失败了 panic: Found two Blueprint files in directory

【问题讨论】:

    标签: android compilation


    【解决方案1】:

    好的,我知道了,但它有点复杂(我可能遗漏了几个步骤):

    所有步骤都可以在任何支持 Android NDK 的地方运行

    1. 克隆https://android.googlesource.com/platform/external/mdnsresponder
    2. cd 进去。
    3. mkdir include 并将https://android.googlesource.com/platform/system/core/+/master/libcutils 下载到其中。
    4. 编辑mDNSPosix/mDNSPosix.c
    #ifndef __ANDROID__
           gethostname((char *)(&namelabel->c[1]), MAX_DOMAIN_LABEL);
       #else
           // use an appropriate default label rather than the linux default of 'localhost'
           strncpy(&namelabel->c[1], "Android", MAX_DOMAIN_LABEL);
    

    #ifndef __ANDROID__
        gethostname((char *)(&namelabel->c[1]), MAX_DOMAIN_LABEL);
    #else
        const char* hostname = getenv("HOSTNAME");
        // use an appropriate default label rather than the linux default of 'localhost'
        strncpy(&namelabel->c[1], hostname, MAX_DOMAIN_LABEL);
    
    1. 编辑mDNSPosix/PosixDaemon.c 并删除
    if (mStatus_NoError == err)
            {
            const struct passwd *pw = getpwnam(MDNS_USERNAME);
            if (pw != NULL)
                setuid(pw->pw_uid);
            else
                LogMsg("WARNING: mdnsd continuing as root because user \"%s\" does not exist", MDNS_USERNAME);
            }
    
    1. 下载Android NDKhere并解压。该位置将被称为$NDK
    2. 复制/system/lib64/libcutils.so$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/31/libcutils.so
    3. 然后,执行这个:
    $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-12 --target=aarch64-linux-android31 -O2  -g  -fno-strict-aliasing  -fwrapv  -D_GNU_SOURCE  -DHAVE_IPV6  -DNOT_HAVE_SA_LEN  -DPLATFORM_NO_RLIMIT  -DMDNS_DEBUGMSGS=0  -DMDNS_UDS_SERVERPATH='"/dev/socket/mdnsd"' -DMDNS_USERNAME='"mdnsr"'  -W  -Wall  -Wextra  -Wno-address-of-packed-member  -Wno-array-bounds  -Wno-pointer-sign  -Wno-unused  -Wno-unused-const-variable  -Wno-unused-parameter  -Werror=implicit-function-declaration -DTARGET_OS_LINUX -DHAVE_LINUX -DUSES_NETLINK -Werror -I./mDNSCore        -I./mDNSPosix        -I./mDNSShared mDNSCore/DNSCommon.c        -I./include -DMDNS_VERSIONSTR_NODTS=1 -lcutils mDNSCore/DNSDigest.c        -llog mDNSCore/mDNS.c        mDNSCore/uDNS.c        mDNSPosix/mDNSPosix.c        mDNSPosix/mDNSUNP.c        mDNSPosix/PosixDaemon.c        mDNSShared/dnssd_ipc.c        mDNSShared/GenLinkedList.c        mDNSShared/mDNSDebug.c        mDNSShared/PlatformCommon.c        mDNSShared/uds_daemon.c 
    
    1. mdnsd 位于./a.out
    2. 使用HOSTNAME=<whatever you want> ./a.out 执行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2020-01-19
      • 2014-02-17
      • 2019-03-14
      • 2017-02-12
      相关资源
      最近更新 更多