好的,我知道了,但它有点复杂(我可能遗漏了几个步骤):
所有步骤都可以在任何支持 Android NDK 的地方运行
- 克隆
https://android.googlesource.com/platform/external/mdnsresponder
-
cd 进去。
-
mkdir include 并将https://android.googlesource.com/platform/system/core/+/master/libcutils 下载到其中。
- 编辑
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);
- 编辑
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);
}
- 下载Android NDKhere并解压。该位置将被称为
$NDK。
- 复制
/system/lib64/libcutils.so到$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/31/libcutils.so
- 然后,执行这个:
$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
-
mdnsd 位于./a.out
- 使用
HOSTNAME=<whatever you want> ./a.out 执行