Android4.4製作自有SDK探析,android4.4sdk探析
Android4.4製作自有SDK探析
最近研究了一下android4.4製作自有SDK的東西。我們都知道,拿到Google的原始代碼後,晶片公司會把它結合晶片去平台化,再發出晶片公司的SDK給客戶,這種SDK通常情況下都是含全部工程代碼環境的,當然裡面有一些是以庫形式發布的,是需要保密的。那麼我們作為中遊的技術公司,又有一定深度的功能定製、產品形態變更帶來的SDK大量的修改,很多是費盡心血完成,當然這部分代碼我們也是要完全保密的,及時我們把它包得再好,也費精力,還要給完整過程代碼,好龐大,這種方式的延伸性不好,擴充性也不佳,同步代碼相當的麻煩,那我們就可以把api留好,我們發布自己的SDK給第三方的合作方,這樣第三方可以調到自己提供的私人api工作,又保護了自己的代碼,也節省精力。那我們怎麼製作SDK呢?下面介紹一下: /****************************************************************************************************/
聲明:本博內容均由http://blog.csdn.net/edsam49原創,轉載請註明出處,謝謝!
/*****************************************************************************************************/
Android4.4代碼量是相當巨大的,首先我們需要設定一下環境:
$. Build/setupenv.sh
如果是編譯具體產品就是lunch具體的產品型號,再去make就可以了。
我們要的是SDK,直接使用“make sdk”是不行的,網上有一些網友有提到,筆者也試過,會報一個Bluetooth方面的錯誤,往下走還會有其他的錯誤,具體原因得好好分析一下編譯系統才知道,按理說也可以走通,筆者未試過。筆者接著用的是“make PRODUCT-sdk-sdk”
$make PRODUCT-sdk-sdk
一開始編譯也是大量的錯誤上來,首先就是“sdk/eclipse/scripts/create_all_symlinks.sh: 第 285 行: cd: tools/base: 沒有那個檔案或目錄”
怎麼辦呢?有網友說用“repo init –g all;reposync”,筆者用的是晶片公司提供的SDK,不是原生的SDK,所以這種方法是不大可行的。在我們的SDK裡面確實沒有發現tools/base目錄,那怎麼辦呢?先屏蔽掉吧!相關的屏蔽如下:
接著往下繼續編譯。又發現“device\generic\goldfish\camera\EmulatedCamera.cpp”這個檔案有錯誤,只好手動把相應錯誤給親手殺死,直接屏蔽。
繼續往下走,順利的話可以build一會,然後就到自己的修改的代碼裡面了,假如我們在開發中大量使用了overlay的話,可能會有不少錯誤上來,這主要源於我們平時開發不夠嚴謹,假如是在代碼裡引用了一個資源的字串,放在了overlay裡面,你編譯特定產品的時候,因為overlay裡面有,當然不會報錯,但是你編譯sdk,那對不起,沒那麼好說話,直接是找不到資源,退出編譯,還有一些布局的xml檔案,圖片檔案,字串都需要拷貝一份到原始代碼位置,平時偷懶的後果就是編譯sdk的時候巨大的懲罰,那一個一個錯誤上來,好煩人,死傷大腦細胞無數。
基於這一點,平時在做應用的時候,大家還是要嚴謹一些。養成一個好習慣,日後工作都會順暢很多。
這些APK編譯的問題都是可見的,也蠻繁重的,一個個來吧,沒辦法。接下來編譯又遇到如下錯誤:
frameworks/base/core/java/android/widget/earthrotate/GLRender.java:44: error 104: @param tag with name that doesn't match the parameter list: 'degree:'frameworks/base/core/java/android/widget/earthrotate/GLRender.java:77: error 104: @param tag with name that doesn't match the parameter list: 'rox'frameworks/base/core/java/android/widget/earthrotate/GLRender.java:78: error 104: @param tag with name that doesn't match the parameter list: 'degree:'DroidDoc took 144 sec. to write docs to out/target/common/docs/offline-sdk100 警告make: *** [out/target/common/docs/offline-sdk-timestamp] 錯誤 45
後面看了一下,也就是注釋的部分出的問題。 修改前後對比如下:
- /**- * dynamic rotation angle to rox- * @param rox- * @param degree: change degree every time- */+ /**+ * dynamic rotation angle to rox+ *+ * @param rox the rox+ *+ * @param degree the degree change every time.+ */ public void toRoatX(final float rox, final float degree) { int what = 1; float dx = rox - roatX;@@ -70,11 +72,13 @@ public class GLRender implements Renderer { h.sendEmptyMessage(what); } - /**- * dynamic rotation angle to rox- * @param rox- * @param degree: change degree every time- */+ /**+ * dynamic rotation angle to rox+ *+ * @param roy the roy+ *+ * @param degree the degree every time.+ */ public void toRoatY(final float roy, final float degree) { int what = 1; float dy = roy - roatY;(END)
差異一看就知道了,所以平時寫這些注釋也要嚴謹啊!
解決完這些自己埋下的隱患,繼續往下走,會出現如下錯誤:
sdk/build/tools.atree:124: couldn't locate source file:tools/base/templates/projectssdk/build/tools.atree:125: couldn't locate source file:tools/base/templates/activitiessdk/build/tools.atree:126: couldn't locate source file:tools/base/templates/gradlesdk/build/tools.atree:127: couldn't locate source file:tools/base/templates/othermake: *** [out/host/linux-x86/sdk/android-sdk_eng.desheng_linux-x86.zip]錯誤 44
因為沒有tools/base,所以我們把它先屏蔽掉,繼續編譯,順利完成!看到如下的圖片,心中一陣竊喜。
產生的sdk在“android\out\host\linux-x86\sdk”下面,android-sdk_eng.desheng_linux-x86.zip,一個680M的大傢伙!
接下來就是驗證這個sdk是否可用了。
驗證的方法也就是解壓這個壓縮檔,再拿一個需要調用私人api的應用去依賴這個sdk,編譯一下,看看能不能編譯通過,再推送到機器裡面去跑一下就知道了。很幸運,筆者的sdk驗證通過!
筆者驗證的時候遇到建立項目會有些問題,主要是一些工具的問題,這可能跟 tools/base下面的東西有關,那麼針對這個問題,我想可以這樣去解決,用自己平時編譯用的SDK環境,再替換相應api級下的android.jar即可,這種方法驗證是可行的。
製作SDK還是蠻辛苦的一件事,辛苦歸辛苦,後面工作高效了就是巨大的彙報!加油!