Android程序调试时生成main.out.xml文件

最近刚开始学习Android,找了几个Demo,研究了一下Android的代码结构。

 

今天在调试一个Demo时,修改了布局文件layout\main.xml,然后ctrl + F11运行, 结果碰到下面的错误:

[2010-06-26 16:48:10 - ListViewDemo] Error in an XML file: aborting build.
[2010-06-26 16:48:10 - ListViewDemo] res\layout\main.xml:0: error: Resource entry main is already defined.
[2010-06-26 16:48:10 - ListViewDemo] res\layout\main.out.xml:0: Originally defined here.

image

  

同时在layout目录下又生成了一个空的main.out.xml文件,觉得很奇怪。

  

后来发现是Eclipse的问题,修改完main.xml后,当前激活的Tab页还是main.xml,所以Eclipse默认就会用xslt转换这个xml文件。

为了解决这个问题,先删除layout目录main.out.xml文件,再选择菜单Project->Clean来Rebuild当前的工程。在Package Exploer选中当前工程右键Run as->Android Application即可运行工程。或者打开任一当前工程的java文件,ctrl+F11就会出现Run as的对话框,同样选择Android Application即可。

  

运行过一次工程后,就会在工具栏的Run as下拉框里面出现之次运行过的工程, 点击下拉的菜单一样可以运行工程。这里的之前跑过的工程可以在菜单Run->Run Configurations,对话框如下:

image

  

这里可以看到main.xml也会出现XSL结点下,这时可以删除它们。

  

总觉得这样实在太麻烦了,因为布局文件是经常改动的,快捷键会经常使用的。不能每次改完main.xml都要把焦点切换到另一个java文件吧或者去点鼠标。

后来发现可以在Eclipse里面配置,菜单Windows->Preference,选择结点Run/Debug->Lauching,Lauch Operation选择第一项。

image

 

 

这样即使当前编辑文件是xml的话,也不会去转换这个xml文件了,而是去运行之前运行过的工程,前提是当前工程运行过一次并且要在之前的Run Configurations把Xsl结点下的main.xml, main.xml(1)之类的无用的删除了。

 欢迎关注我的微信公众号

 

转载于:https://www.cnblogs.com/mobilegeek/archive/2010/06/26/Android-debug-main-out-xml-parsing-error.html

### 修改或访问 Android 中根目录下的 `default.prop` 文件 #### 权限需求 为了能够修改或访问 `/default.prop` 文件,应用程序需要具备特定权限。通常情况下,该文件位于系统的只读区域,因此需要获取超级用户权限 (root),或者通过系统级别的操作来完成此任务。 以下是实现这一目标的关键步骤说明: 1. **申请外部存储权限** 需要在应用的 `AndroidManifest.xml` 文件中声明对外部存储的操作权限[^2]: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 这些权限允许程序对设备上的某些部分进行写入和读取操作,尽管它们并不直接影响到根目录中的文件。 2. **使用 Root 权限运行命令** 如果希望直接修改 `/default.prop` 文件,则需借助 Shell 命令并以超级用户身份执行。这可以通过调用 `su` 命令获得提升后的权限。下面是一段示例代码展示如何利用 Java 或 Kotlin 实现这一点: ```java public void modifyDefaultProp() { try { Process process = Runtime.getRuntime().exec("su"); // 请求Root权限 OutputStream os = process.getOutputStream(); String command = "mount -o remount,rw /system\n"; // 将/system分区重新挂载为可写模式 command += "echo 'ro.debuggable=1' >> /default.prop\n"; // 向default.prop追加调试属性 command += "mount -o ro,remount /system\n"; // 恢复/system为只读状态 os.write(command.getBytes()); os.flush(); os.close(); int exitCode = process.waitFor(); // 等待进程结束 if(exitCode != 0){ System.out.println("Failed to execute commands."); } } catch (Exception e) { e.printStackTrace(); } } ``` 3. **理解 Init 脚本的作用** 在 Android 的启动过程中,`init.rc` 是核心组件之一,负责定义服务和服务的行为以及响应各种事件的动作[^3]。虽然它本身不直接参与 `default.prop` 文件的内容设置,但它可以用来创建自定义的服务,在适当的间点加载或调整配置项。 4. **构建环境与编译过程** 若要彻底更改默认行为而不依赖于第三方工具或Root权限,开发者可以选择定制 ROM 并在源码级别做出改动。例如,在 AOSP 源码树下找到对应的 Bazel 构建描述文件 (`Android.bp`) 和 C++ 主入口函数(`main.cpp`)[^1] ,然后编辑这些地方指定新的初始参数集给最终生成的目标镜像。 #### 注意事项 - 上述方法仅适用于已解锁 bootloader 的开发版手机或其他支持自由安装自定义固件的产品。 - 不当操作可能导致设备变砖,请谨慎行事!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值