PhoneGap构建APK失败,出现FontFamilyFont相关错误
问题分析
从你提供的报错日志里的ERROR: In FontFamilyFont, unable to find attribute android:font这类信息来看,问题很明确:PhoneGap Build的Android构建环境默认升级了SDK和构建工具版本,但你当前用的还是旧版的PhoneGap CLI(cli-7.0.1),这套旧环境不识别Android SDK里新增的字体相关属性,直接导致资源编译环节失败。好在iOS构建环境没对应变更,所以IPA还能正常生成。
具体修复步骤
结合你的DevExtreme/PhoneGap项目配置,一步步来改:
1. 升级PhoneGap CLI版本
打开config.xml,把phonegap-version从cli-7.0.1替换成兼容新Android环境的稳定版本,推荐用cli-9.0.0(这个版本经过大量验证,适配性很强):
<preference name="phonegap-version" value="cli-9.0.0" />
2. 明确指定Android引擎版本
把你config.xml里注释掉的engines节点解开,指定和cli-9.0.0匹配的Cordova Android版本android@8.1.0,这样能固定构建环境,避免后续自动升级引发问题:
<engines> <engine name="android" spec="^8.1.0" /> </engines>
3. 调整Android SDK版本配置
你的android-minSdkVersion设为15虽然能兼容老设备,但建议和目标版本搭配更合理的范围,同时把targetSdkVersion调整到和新引擎兼容的版本,比如:
<preference name="android-minSdkVersion" value="19" /> <preference name="android-targetSdkVersion" value="28" />
(如果你的项目必须兼容Android 4.0及以下,minSdkVersion可以保留15,但targetSdkVersion至少要升到26以上才能适配新构建工具)
4. 更新老旧插件
部分旧版本插件可能和新引擎不兼容,建议把这些插件升级到稳定版:
cordova-plugin-geolocation:从2.4.1更新到^4.0.2cordova-plugin-camera:从^2.4.1更新到^4.1.0phonegap-plugin-push:从2.0.0更新到^2.3.0
更新后的插件配置示例:
<plugin name="cordova-plugin-geolocation" spec="^4.0.2" /> <plugin name="cordova-plugin-camera" spec="^4.1.0" source="npm"> <variable name="CAMERA_USAGE_DESCRIPTION" value="This app requires access to take picture and send them, if needed." /> <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="This app requires access to the photo library to send them, if needed." /> </plugin> <plugin name="phonegap-plugin-push" spec="^2.3.0" />
5. 清理缓存重新构建
修改完所有配置后,重新打包你的项目压缩包,上传到PhoneGap Build。记得在项目页面点击"Clear Cache"清理旧的构建缓存,然后再触发新的构建任务。
修复原理
新版本的PhoneGap CLI和Cordova Android引擎已经适配了最新的Android SDK属性,能正确识别那些FontFamilyFont相关的字段,这样就能绕过之前的编译错误,顺利生成APK了。
内容的提问来源于stack exchange,提问作者Piero Alberto

