android编译framework架包运行报错

作者在修改了Android框架中的LockScreen.java和MultiWaveView.java文件后,尝试通过makeframework、makesnod和makesystemimage进行编译,但导致模拟器在启动时无法进入主界面,出现多个服务终止的错误。经过分析,最终使用droidcore命令成功解决了问题。文章详细记录了解决过程和原因分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看frameworks里的源码,手痒了,便想改改看看效果,没想到改完后,模拟器却运行不起来了。

        首先声明,我是用的android 4.0.3 ICS的源码,编译好后,利用编译好的镜像启动的模拟器,以前修改过里面的Launcher,将生成的Launcher.apk和Launcher.odex  push后是成功的。

现在我在

frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen.java

frameworks/base/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java

中加了一点log,其实就是解锁时相应的输出坐标等信息,

试了两种方法:

1. make framework   
  make snod

2.  在framework/base中mm
  adb push framework.jar 和 framework.odex 到 system/framework/

结果都是在启动模拟器时,在开机显示 android字样时进不去了,ddms中不停的打印如下信息:

07-30 06:50:52.762: I/ServiceManager(30): service 'media.audio_policy' died
07-30 06:50:52.762: I/ServiceManager(30): service 'media.audio_flinger' died
07-30 06:50:52.762: I/ServiceManager(30): service 'media.player' died
07-30 06:50:52.762: I/ServiceManager(30): service 'media.camera' died
07-30 06:50:52.822: I/Netd(383): Netd 1.0 starting
07-30 06:50:52.842: E/Netd(383): Unable to bind netlink socket: No such file or directory
07-30 06:50:52.842: E/Netd(383): Unable to open quota2 logging socket
07-30 06:50:53.253: I/(381): ServiceManager: 0xf958
07-30 06:50:53.253: I/AudioFlinger(381): Loaded primary audio interface from LEGACY Audio HW HAL (audio)
07-30 06:50:53.253: I/AudioFlinger(381): Using 'LEGACY Audio HW HAL' (audio.primary) as the primary audio interface
07-30 06:50:53.253: D/AudioHardwareInterface(381): setMode(NORMAL)
07-30 06:50:53.253: I/CameraService(381): CameraService started (pid=381)
07-30 06:50:53.262: D/EmulatedCamera_QemuClient(381): Emulated camera list:  
07-30 06:50:53.262: D/EmulatedCamera_FakeCamera(381): Initialize: Fake camera is facing back
07-30 06:50:53.262: V/EmulatedCamera_Factory(381): 1 cameras are being emulated. Fake camera ID is 0
07-30 06:50:53.272: I/AudioFlinger(381): AudioFlinger's thread 0x10fb0 ready to run
07-30 06:50:53.272: W/AudioFlinger(381): Thread AudioOut_1 cannot connect to the power manager service
07-30 06:50:53.272: I/AudioPolicyService(381): Loaded audio policy from LEGACY Audio Policy HAL (audio_policy)
07-30 06:50:56.022: D/AndroidRuntime(393): >>>>>> AndroidRuntime START com.android.internal.os.ZygoteInit <<<<<<
07-30 06:50:56.022: D/AndroidRuntime(393): CheckJNI is ON
07-30 06:50:56.042: I/dalvikvm(393): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
07-30 06:50:56.042: E/dalvikvm(393): /system/framework/android.policy.jar odex has stale dependencies
07-30 06:50:56.042: I/dalvikvm(393): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
07-30 06:50:56.042: D/dalvikvm(393): Unable to process classpath element '/system/framework/android.policy.jar'
07-30 06:50:56.042: I/dalvikvm(393): DexOpt: Some deps went away
07-30 06:50:56.042: E/dalvikvm(393): /system/framework/services.jar odex has stale dependencies
07-30 06:50:56.042: I/dalvikvm(393): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
07-30 06:50:56.042: D/dalvikvm(393): Unable to process classpath element '/system/framework/services.jar'
07-30 06:50:56.042: I/dalvikvm(393): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
07-30 06:50:56.042: E/dalvikvm(393): /system/framework/apache-xml.jar odex has stale dependencies
07-30 06:50:56.042: I/dalvikvm(393): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
07-30 06:50:56.042: D/dalvikvm(393): Unable to process classpath element '/system/framework/apache-xml.jar'
07-30 06:50:56.042: I/dalvikvm(393): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
07-30 06:50:56.042: E/dalvikvm(393): /system/framework/filterfw.jar odex has stale dependencies
07-30 06:50:56.042: I/dalvikvm(393): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
07-30 06:50:56.042: D/dalvikvm(393): Unable to process classpath element '/system/framework/filterfw.jar'
07-30 06:50:56.682: E/JNIHelp(393): Native registration unable to find class 'com/android/server/Watchdog', aborting

07-30 06:50:56.682: A/libc(393): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)

后来根据高手的提示,去看 build/core/main.mk,发现里面有个droidcore命令,

尝试使用make droidcore编译后,模拟器成功运行,并打印出修改的log,后来仔细分析droidcore:

755 .PHONY: droidcore

756 droidcore: files \
757     systemimage \
758     $(INSTALLED_BOOTIMAGE_TARGET) \
759     $(INSTALLED_RECOVERYIMAGE_TARGET) \
760     $(INSTALLED_USERDATAIMAGE_TARGET) \
761     $(INSTALLED_FILES_FILE)
发现一开始是执行systemimage,于是我又尝试用make systemimage来编译:
修改framework中源码,在framework/base 中mm,退至源码根目录,make systemimage后,启动模拟器,修改效果成功显示。
Ps:
1.貌似执行make snod(systemimage no dependence)不行,看来要编上dependence才行。
2.在make systemimage 之后一定要关闭模拟器重开才行,执行adb shell stop,adb shell start也不行。
就是时间比较长,编一下要10分钟左右。
<think>好的,我现在需要帮助用户解决UE5打运行时的错误问题。首先,我要理解用户的问题。用户提到打后出现错误,但没有具体说明错误信息,所以可能需要考虑常见的错误类型。根据提供的引用,特别是引用[3]和[5],可能涉及打设置或资源定位问题。 首先,我应该检查用户是否按照正确的打步骤配置项目。引用[3]提到ProjectSettings中的Packaging设置,需要确保勾选ShowAdvanced并检查相关选项,比如是否启用了Use Pak File或Include Prerequisites。这些设置不正确可能导致资源无法正确打,从而引发运行时错误。 然后,用户可能遇到资源丢失或路径错误的问题。比如,No obb found错误在引用[5]中提到,可能需要检查APK设置中的存储密钥或OBB文件是否正确生成。此外,资源引用是否正确,特别是绝对路径和相对路径的问题,需要确保所有资源都正确含在打过程中。 接下来,考虑依赖项是否完整。引用[2]提到硬件要求和开发编译环境,可能需要确认用户安装了必要的SDK、NDK以及Visual Studio的相关组件。如果这些依赖缺失,打后的程序可能无法运行。 另外,日志分析是关键。用户可能没有查看日志的习惯,应该引导他们检查Saved/Logs文件夹中的日志文件,特别是打日志和运行时日志,以确定具体的错误原因。例如,引用[4]提到收集Bug的专栏,可能含更多具体案例,但用户需要具体日志才能对应解决方案。 还需要考虑平台兼容性问题。用户是否在正确的目标平台上打?比如Android和Windows的配置不同,需要分别检查。项目设置中的目标平台是否正确,相关SDK是否安装,都是常见问题点。 最后,建议用户进行逐步排查:验证项目设置、检查依赖项、查看日志、测试空项目。如果问题依旧,可能需要重新安装引擎或创建新项目来排除项目文件损坏的可能性。 总结起来,我需要将这些步骤组织成清晰的解决方案,分点说明,并引用相关的参考资料来支持建议。同时,生成相关问题帮助用户进一步排查其他潜在问题。</think>### Unreal Engine 5 打项目后运行报错的原因及解决方案 #### 一、常见错误类型与原因 1. **资源缺失或路径错误** - 未正确引用资源可能导致报错`No obb found`或`Failed to load asset`。需检查所有蓝图、材质、贴图的引用是否为**相对路径**而非绝对路径[^5]。 - 动态加载资源(如`LoadObject`)需确保资源已标记为**始终加载**(Never Stream)。 2. **依赖项未正确打** - 插件缺失:未在`Edit > Plugins`中启用必需插件,或未勾选`Include Prerequisites`[^3]。 - 第三方库未集成:如Android平台需验证NDK、SDK版本兼容性[^2]。 3. **项目配置问题** - **打设置错误**:在`Project Settings > Packaging`中需勾选`Use Pak File`,并排除开发专用目录(如`Intermediate`)。 - 目标平台不匹配:如Android项目的`Minimum SDK Version`设置过低。 #### 二、分步解决方案 **步骤1:验证基础配置** ```markdown 1. 打开 `Project Settings > Project > Packaging` 2. 勾选 `ShowAdvanced`,确保以下选项启用: - [√] Build Configuration = `Shipping` - [√] Full Rebuild - [√] Include Prerequisites 3. 清除 `Saved` 和 `Intermediate` 目录后重新打 ``` **步骤2:检查平台依赖** - **Windows**:安装`Windows 10 SDK (10.0.17763.0)`和`.NET Framework 4.8` - **Android**:验证NDK版本(推荐r21e)和Gradle配置 - **iOS**:确认证书和描述文件有效性 **步骤3:日志分析** - 查看打日志:`Saved/Logs/ProjectName-Packaging.log` - 运行时错误日志:`Saved/Logs/ProjectName.log` 示例关键错误标识: ```log Error: Failed to bind to port 7777 → 网络模块未编译 LogInit: Fatal error → 核心模块缺失[^4] ``` #### 三、进阶排查 1. **空项目测试** 新建空白项目并打,若成功则原项目存在资源或代码问题。 2. **引擎完整性验证** 通过Epic Games启动器执行`Verify Engine`,修复损坏文件。 3. **命令行打** ```bash UE5Editor.exe ProjectName.uproject -Package -TargetPlatform=Win64 -BuildConfig=Shipping ``` 可跳过编辑器潜在的环境污染问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值