最近开始做Android平台下的CarPlay开发, 笔者暂时负责Bonjour 及 apple 提供的插件(开发包)移植到Android平台的工作, 移植过程中遇到了很多问题, 现记录一下遇到的主要问题,希望能帮助到遇到同样问题的同学。 一. Bonjour 及 CarPlay Plugin移植到 Linux 并运行
因为CarPlay Plugin 需要Bonjour的支持, 因此需要先编译好Bonjour, Bonjour和CarPlay Plugin都提供了Posix兼容平台的makefile, 因此先把他们移植到Linux环境,运行、证代码是否正常,然后再移植到Android NDK 环境。
Bonjour是开源项目,代码目录名为:mDNSResponder, 有很多个版本, CarPlay Plugin 依赖特定版本的Bonjour, 但是在文档及代码注释中都没有找到相关的说明, 后来直接搜索代码,找到mDNSResponder-320版本能满足需求,因此在网上下载了这个版本的代码, 放到Ubuntu环境中编译,
(此处堪一误,CarPlay plugin中的readme中明确指出需要544版本的bonjour)笔者之前用107版本的代码会提示:
kDNSServiceFlagsSuppressUnusable找不到。
问题1:
cd 到 mDNSPosix目录下面, 执行make os=linux, 会得到以下错误: dns-sd.c: In function ‘getip’:
dns-sd.c:173:30: error: ‘struct sockaddr’ has no member named ‘sa_len’
#define SA_LEN(addr) ((addr)->sa_len)
原因是Ubuntu环境下网络地址中没有sa_len这个成员,所以把这里出错代码:
memcpy(result, addrs->ai_addr, SA_LEN(addrs->ai_addr));
改成
memcpy(result, addrs->ai_addr, sizeof(addrs->ai_addr));
即可。 问题2: dnsextd_parser.y.o dnsextd_lexer.l.o 文件找不到
查看makefile 看到.