Android开发出现 invalid command-line parameter: Files. 解决办法

启动Android程序和虚拟机时候出现如下错误的解决方法。

错误重现:


[2011-07-13 16:22:48 - Emulator] invalid command-line parameter: Files.

[2011-07-13 16:22:48 - Emulator] Hint: use '@foo' to launch a virtual device named 'foo'.
[2011-07-13 16:22:48 - Emulator] please use -help for more information


原因:我的系统是window764位,这个错误发生的原因是因为我将Android SDK 文件夹放在了 D:\Program Files (x86)\Android\android-sdk,

而Program Files (x86)中间存在空格所致。


解决方法:将Program Files (x86)用对应的(8.3 Format names)8.3文件名 PROGRA~1 替换,

使用dir /x命令查看对应名称


例如:进入cmd 输入dir /x d:\


故可将 D:\Program Files (x86)\Android\android-sdk
改成 D:\PROGRA~1\Android\android-sdk


如下图所示。 (为什么可用参考http://en.wikipedia.org/wiki/Program_Files



提示:解决办法(2)也可将Android sdk移动到无中文和空格的路径下。无需使用对应8.3文件名替换也可用调试成功.

03-21 23:30:14.686 10057 29101 29101 D CompatChangeReporter: Compat change id reported: 202956589; UID 10057; state: ENABLED 03-21 23:30:14.687 1000 2675 4003 D ActivityManager: Cancel freezing 29079 com.google.android.apps.carrier.carrierwifi 03-21 23:30:14.696 10057 29101 29101 I Perf : Connecting to perf service. 03-21 23:30:14.701 10057 29101 29101 V GraphicsEnvironment: Currently set values for: 03-21 23:30:14.701 10057 29101 29101 V GraphicsEnvironment: angle_gl_driver_selection_pkgs=[] 03-21 23:30:14.701 10057 29101 29101 V GraphicsEnvironment: angle_gl_driver_selection_values=[] 03-21 23:30:14.701 10057 29101 29101 V GraphicsEnvironment: Global.Settings values are invalid: number of packages: 0, number of values: 0 03-21 23:30:14.701 10057 29101 29101 V GraphicsEnvironment: Neither updatable production driver nor prerelease driver is supported. 03-21 23:30:14.714 10057 29101 29116 W ThemeOverlayManager: Skip enabled overlay package:com.google.android.overlay.modules.documentsui, user:UserHandle{0} 03-21 23:30:14.728 10112 29079 29115 D CompatChangeReporter: Compat change id reported: 263076149; UID 10112; state: ENABLED 03-21 23:30:14.735 1000 2675 4003 D CompatChangeReporter: Compat change id reported: 161145287; UID 10112; state: ENABLED 03-21 23:30:14.737 10057 29101 29101 E oid.documentsui: Invalid resource ID 0x00000000. 03-21 23:30:14.738 10057 29101 29101 D CompatChangeReporter: Compat change id reported: 279646685; UID 10057; state: ENABLED 03-21 23:30:14.751 1000 2675 4665 D ActivityManager: Async freezing 29079 com.google.android.apps.carrier.carrierwifi 03-21 23:30:14.752 1000 2675 4665 D ActivityManager: Cancel freezing 28526 com.google.android.apps.docs 03-21 23:30:14.761 1000 2675 4683 D ActivityManager: Cancel freezing 29079 com.google.android.apps.carrier.carrierwifi 03-21 23:30:14.765 10057 29101 29123 I ProvidersCache: Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage 03-21 23:30:14.766
最新发布
03-22
<think>好的,我现在需要帮助用户分析Android日志中的“Invalid resource ID 0x00000000”错误。首先,我需要理解这个错误的含义和常见原因。 首先,错误信息中的“Invalid resource ID 0x00000000”表明应用尝试访问一个无效的资源ID。资源ID通常是在编译时由Android系统自动生成的,例如布局文件、图片、字符串等都会对应一个唯一的十六进制ID。当这个ID为0x00000000时,表示资源未被正确找到或引用错误。 接下来,我需要考虑可能导致这个错误的各种原因。根据经验和参考资料,可能的因素包括: 1. **资源未正确引用**:比如在XML布局文件中错误地使用了不存在的资源名称,或者在代码中使用错误的变量名引用资源ID。例如,可能误写了一个布局文件的名称,导致R类中没有生成对应的ID,此时在运行时就会找不到资源,ID为0。 2. **资源未正确生成**:有时候,资源文件本身存在语法错误,比如XML格式不正确,导致编译时资源生成失败。这会导致相关的资源ID未被正确生成,引用时会得到0值。用户需要检查资源文件是否有错误,并确保编译过程没有报错。 3. **动态加载资源时的上下文问题**:如果在非Activity上下文中(如Service或Application)使用getResources()方法,或者使用了错误的Context来加载资源,可能会导致资源查找失败。例如,使用ApplicationContext去获取资源,但该资源可能不在当前主题或配置中可用,导致返回0。 4. **ProGuard混淆问题**:如果启用了代码混淆工具(如ProGuard),可能会错误地混淆或删除了R类中的资源ID字段。需要检查ProGuard配置,确保保留R类及其相关字段不被混淆或删除。 5. **多模块项目中的资源冲突**:在包含多个模块的项目中,如果不同模块存在同名资源,可能导致资源合并时出现问题,最终生成的资源ID异常。需要检查各个模块的资源命名是否冲突,并确保正确引用。 6. **Android插件或Gradle版本问题**:有时候,Gradle插件版本过旧或存在bug,可能导致资源生成异常。升级到最新稳定版本的Gradle和Android插件可能解决此类问题。 此外,用户提供的引用中提到了资源ID的标志位为0x00000000,这可能进一步验证了资源未正确生成或被错误引用的可能性。需要检查相关资源文件的编译日志,确认是否有错误或警告。 接下来,用户可能需要具体的排查步骤。例如: - 检查日志中报错的代码位置,确定是哪个资源ID导致的问题。 - 确认对应的资源文件是否存在且命名正确,没有拼写错误。 - 清理项目并重新编译,观察是否问题依旧。 - 检查build目录下的R.java文件,确认对应的资源是否有正确的ID生成。 - 检查是否在正确的上下文中加载资源,特别是在Fragment或自定义View中是否传递了正确的Context。 - 查看ProGuard配置,确保R类及其内部类未被混淆。 - 在多模块项目中,检查资源引用是否使用了正确的包名限定,如R.layout.module_activity_main。 最后,如果以上步骤无法解决问题,可能需要更深入的调试,如使用Android Studio的布局检查工具,或者在运行时打印资源ID的值,确认其是否为0,从而定位具体的问题点。</think>### 解析 Android 日志中的 'Invalid resource ID 0x00000000' 错误及可能原因 #### 1. 错误含义 该错误表示应用尝试访问一个无效的资源ID(例如布局、字符串、图片等),而系统未找到对应的资源定义。资源ID通常由Android编译时自动生成(如`R.layout.activity_main`),若ID为`0x00000000`,说明资源未正确生成或引用方式错误。 --- #### 2. 主要原因分析 ##### 2.1 资源未正确引用 - **XML布局文件或代码中拼写错误** 例如,在布局文件中错误引用了`@layout/maiin_activity`(正确应为`main_activity`),或在代码中使用`R.id.incorrect_id`。此时编译可能通过,但运行时因找不到资源导致ID为0[^1]。 - **动态加载资源时上下文错误** 在非Activity上下文中(如Service)直接使用`getResources().getIdentifier()`可能导致资源解析失败。需确保使用与资源绑定的正确`Context`。 ##### 2.2 资源未生成或编译失败 - **资源文件语法错误** 如XML中存在未闭合标签、属性值错误(如`android:layout_width="match_parent"`写成`match_parent`不带引号),导致资源编译失败,相关ID未被生成。 - **Gradle缓存问题** 旧版本Gradle可能因缓存未清理导致资源未更新。可尝试清理缓存: ```bash ./gradlew clean ``` ##### 2.3 ProGuard混淆问题 若启用代码混淆且未正确保留资源ID字段,可能导致R类中的ID被移除或重命名。需在ProGuard规则中添加: ```proguard -keep class **.R$* { *; } ``` ##### 2.4 多模块项目资源冲突 在模块化项目中,若多个模块存在同名资源(如`strings.xml`中定义相同键名),合并时可能覆盖或冲突。建议通过命名空间隔离资源: ```xml <!-- 模块A --> <string name="moduleA_key">value</string> <!-- 模块B --> <string name="moduleB_key">value</string> ``` ##### 2.5 高版本API兼容性问题 使用高版本SDK的特性(如Material Design组件)但未在低版本设备上适配,可能导致资源加载异常。需检查`build.gradle`中的`minSdkVersion`与`targetSdkVersion`是否合理。 --- #### 3. 排查步骤 1. **定位报错代码位置** 通过日志堆栈找到触发错误的代码行,例如: ```java View view = inflater.inflate(R.layout.fragment_error, container, false); // 此处R.layout.fragment_error无效 ``` 2. **检查资源文件是否存在** 确认`res/layout/fragment_error.xml`存在且无语法错误。 3. **清理并重新编译项目** 执行`Build > Clean Project`和`Build > Rebuild Project`。 4. **检查R.java文件** 在`app/build/generated/not_namespaced_r_class_sources/debug/r/com/example/app/R.java`中查找对应资源ID是否生成。 5. **验证资源加载上下文** 确保在Activity或Fragment中加载资源,而非后台线程或无关组件。 --- #### 4. 示例代码与修复 **错误代码(错误的资源名):** ```java // 尝试加载不存在的布局 setContentView(R.layout.activity_mainn); // 正确应为activity_main ``` **修复后:** ```java setContentView(R.layout.activity_main); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值