自己編譯的android sdk無法識別各版本platform的問題

來源:互聯網
上載者:User

今天編譯了android 2.3源碼,即gingerbread。原始碼是通過"repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread"取出的。

編譯完成後,啟動SDKManager發現在"Installed packages"中無法找到編譯出來的android-2.3

進入編譯結果目錄 out/host/linux-x86/sdk/android-sdk_eng.cmoaciopm_linux-x86/tools 發現android-2.3是存在的,那為什麼SDKManager檢測不到呢?

很蛋疼的查看了sdkmanager的原始碼,終於找到問題所在

sdkmanager的原始碼存放在sdk/sdkmanager下,包含三個工程

1. app:sdkmanager主介面及介面邏輯

2. lib/sdklib:sdkmanager核心邏輯

3. lib/sdkuilib:sdkmanager的子UI組件代碼


SdkManager.reloadSdk()是檢測installed packages的方法,檢測標準如下

1. 校正build.prop檔案,
    從ro.build.version.release擷取apiName
    從ro.build.version.sdk擷取apiNumber
    從ro.build.version.codename擷取apiCodeName(optional)
2. 校正source.properties
    Pkg.Revision
    非必須
3. 校正sdk.properties
    非必須
4. 校正platforms/[sdk-version]/目錄下的關鍵檔案是否存在
    android.jar
    framework.aidl
    tools/aapt
    tools/aidl
    tools/dx
    tools/lib/dx.jar

看到這裡,終於知道SDKManager無法檢測到Install packages的原因了,我所檢出的android gingerbread原始碼編譯出的sdk目錄結構與SDKManager檢測邏輯是不一致的。

android在2.3對sdk目錄結構進行了調整,將platform下面的tools檔案夾移動到SDK根目錄下,命名為platform-tools(裡麵包含了該platform的aapt和adb等工具。這樣,platform在各作業系統下都統一了,不需要再為不同作業系統發布不同的platform,僅發布不同的platform-tools即可)。

可見gingerbreak代碼分支中sdkmanager的代碼不是“最新的”,沒有與編譯出來的sdk目錄結構保持一致。google也有失誤的時候,這麼大的項目也可以理解

瞭解了以上事實,於是乎做了軟連結,騙過sdkmanager,重啟檢測一切正常


PS : android-sdk目錄的tools下的andriod命令,指定-v參數可以顯示error和warning的日誌,通過這個參數就能查看到sdkmanager的警告和錯誤記錄檔了



本文轉載自:http://blog.csdn.net/cmoaciopm/article/details/6710243

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: