gen下R文件消失 && 工程無端報錯

1、R文件失蹤案

1. 背景: html

前些時候,在進行Android程序開發過程當中幫助同窗修改xml代碼時候,偶爾會出現R類文件離奇失蹤事件,當時通過一些恢復操做無果後,只好重建一個工程。因爲R類文件在Android工程中是一個極其特殊的存在,因此我就此進行了一些小測試。 android

2. 失蹤者資料: 網絡

R類文件是由ADT自動生成的一個文件,居所是gen目錄下,其會爲每個資源定義惟一的ID,而整個工程就是經過ID的識別來引用相關資源,故R類文件可謂是咱們工做的資源中心。 app

3. 案情分析: eclipse

因爲R類文件的特殊性,故其的做用是舉足輕重的,但這時它居然失蹤的!!一個諾大的工廠就由於缺少資源的「進口」,沒法進行任何「生產」了。到底是誰把咱們的R類文件給綁票了呢?現進行以下可能性推測: ide

a) 開發者的不當心把gen目錄給刪除了; 工具

b) 開發工具的一個bug。 佈局

4. 案情推理: 開發工具

a) 測試環境:Android-1.5 測試

gen下R文件消失 <wbr>&& <wbr>工程無端報錯

i. 是開發者的粗枝大葉麼?

  1. 新建一個普通的工程,而後手動刪除gen目錄,立刻地工程就報錯的,但很快就工程目錄下自動生成gen目錄,而且在該目錄下能夠找到R類文件,程序運行無誤。
  2. 經過Project->Clean功能,進行該操做的緣由是R類文件是與資源文件同步來定義資源ID的,而該功能能清除開發工具自身產生的操做。果不其然,gen目錄消失不見了,但通過對任意文件的修改並保存後,gen目錄從新出如今工程目錄中,這與背景描述不符。
  3. 在工程的實際路徑下刪除gen目錄,而後在eclipse中導入該工程,報錯如右圖所示,一樣進行對文件的修改,結果gen目錄又回來了,與背景描述也不符。
  4. 綜上可得結論:開發工具自動生成R類文件的功能是如此的強大,而且我以爲每個Android開發者都應該知道R類文件的重要,並不會冒然去對它進行如此危險的操做吧^_^。。

ii. 是一個bug?

  1. 把佈局文件夾下的文件故意修改爲報錯狀態保存後,進行Clean操做後,只要保持報錯狀態,R類文件就不會恢復。
  2. 關於這個問題更多的測試,我真不知道該如何去作,根據網絡上的相關介紹,確實有至關一部分人出現R類文件丟失的狀況,而大多數介紹的是因爲資源文件夾裏的xml資源文件使用了轉義字符的緣故,也就是說開發工具可能定義了轉義字符但忽略了在字符串中使用它們的可能性。

 

5. 案件結論:

a) 修正全部報錯的地方,便可。

b) 既然多是開發工具的中轉義字符引發的一個bug,那麼在使用轉義字符的時候就應當注意一下了,下面給出經常使用的轉義字符

轉義字符 實際符號 名稱
&lt; < 小於號
&gt; > 大於號
&amp; &
&apos; ' 單引號
&quot; " 雙引號

備註:轉義字符後面的分號不可省略,更多的轉義字符可參考網絡資源。

c) 解決方案:

i. 右擊工程->Android Tools->Fix Project Properties

ii. 右擊工程->Properties->Android->選擇正確相應的target而後點擊apply。

iii. 上面兩方法不奏效時,就能檢查下res文件夾裏的xml資源文件了:

(1)xml文件名不能包括大寫字母。

2、android工程無端報錯--conversion to dalvik format failed with error 1

conversion to dalvik format failed with error 1:

android低版本工程(如2.1)放到高版本環境中(如2.2)可能會上述錯誤。

法(1):Android2.1問題。建工程建議直接使用2.2以上版本。

法(2):嘗試project clean。

法(3):修改SDK版本。

網上問題解決附錄:

在eclipse開發Android項目時出現的不少問題均可以使用Project--------->clean來輕易解決。

但若是出現說Android庫找不到,或者不當心remove了Android系統庫,怎麼從新添加Android系統庫呢?
在eclipse裏面的Java Build Path裏面是無法添加例如Android 2.1這樣定義好的系統庫。而我嘗試手動添加
SDK 文件夾裏面的Android.jar,結果出現了Conversion to Dalvik format failed with error 1問題了。折騰了
一番後,不少網友都說用Project clean能夠解決,但對個人狀況來講,沒有用處。
在百度找到解決方法了:
修改項目classpath文件,這讓我明白了,直接從其餘正常項目裏面把
<!-- 注意,這個.classpath文件在eclipse工做空間的硬盤存放位置對應工程項目目錄下面 -->

<classpathentry kind="lib" path ="自定義jar的地址" />
修改爲

<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>。
這樣子刷新項目,Android系統庫Android 2.1回來了,那個錯誤也解決了。

--------------------------------------------------------------------------------------------------------------------------

這幾天又遇到這樣的問題了,可是.classpath文件裏面已經包含了上面的con Path,後來在論壇
(http://www.eoeandroid.com/thread-53880-1-1.html)上找到新方法:

project -> properties -> android label, check a target from the project build target list
<!-- 這樣有時候仍是不能去掉錯誤,這時候注意,在進入project -> properties -> android後,下面有
一個is library項,把它勾上,再點擊肯定錯誤就OK了,個人錯誤就是這樣解決的,一開始按照上面
以及後面的方法都解決不了,最後我看到有一個is library項,把它勾上再肯定試一下OK,錯誤沒了 -->
============================================================================

附:
上網上廣爲流傳的解決方法:conversion to dalvik format failed with error 1的解決辦法

android低版本工程(如1.5)放到高版本環境中(如2.2)可能會上述錯誤,解決方法以下:
一、若是不修改android sdk版本,則使用project clean 命令做用於某工程便可。 (該處理方式
只是在高版本中兼容了低版本工程,未真正意義上的升級)

二、若是修改android sdk版本,則須要如下幾個步驟:
1) 修改SDK
選擇工程,build path --> configure build path ---> library 刪除引用的低版本SDK,
而後add External JARs,選擇高版本SDK,OK,保存
2) 修改classpath文件

該文件可能存在該項: <classpathentry kind="lib" path ="你所指定的高版本的地址" 把她修改爲<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK" /> 3) 修改AndroidManifest.xml 在AndroidManifest.xml文件中,application標籤後添加<uses-sdk android:minSdkVersion="3"></uses-sdk> 4) 修改default.properties(很重要) 該文件最後一行(前面沒用#的)target=android-3 該成target=android-8,保存。 再看看你的工程和新建的android 2.2的工程結構就同樣了。

相關文章
相關標籤/搜索