Android4.4製作自有SDK探析,android4.4sdk探析

來源:互聯網
上載者:User

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還是蠻辛苦的一件事,辛苦歸辛苦,後面工作高效了就是巨大的彙報!加油!

 

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.