Android高手過招 FAQ

jopen 10年前發布 | 14K 次閱讀 Android Android開發 移動開發

1、Q:如何成為高手?

      A:成為一名真正的Android高手必須掌握和遵循的一些準則:

          1)學會懶惰
     aDon't Reinvent the Wheel(不要重復發明輪子)。
     bInventing the Wheel(發明輪子)。
     cDon't Reinvent the Wheel(不要重復發明輪子)。
    “輪子理論”,也即“不要重復發明輪子”,這是西方國家的一句諺語,原話是:Don't Reinvent the Wheel。“不要重復發明輪子 ”意思是企業中任何一項工作實際上都有人做過,我們所需要做的就是找到做過這件事情的人。拿到軟件領域中就是指有的項目或功能,別人已經做過,我們需要用的時候,直接拿來用即可,而不要重新制造。

          2)精通Android體系架構、MVC、常見的設計模式、控制反轉(IoC)

          3)編寫可重用、可擴展、可維護、靈活性高的代碼

          4)高效的編寫高效的代碼

          5)學會至少一門服務器端開發技術
     

2、Q:JNI是什么?

   A:JNI是Java Native Interface的縮寫,中文為JAVA本地調用。從Java1.1開始,Java Native Interface(JNI)標準成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是為了本地已編譯語言,尤其是 C和C++而設計的,但是它并不妨礙你使用其他語言,只要調用約定受支持就可以了。

     使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫,與硬件、操作系統進行交互,或者為了提高程序的性能。JNI標準至少保證本地代碼能工作在任何Java 虛擬機實現下。


3、Q:Android和Linux的區別?

      A:Android是一個專門針對移動設備的軟件集,包括一個操作系統,中間件和一些重要的應用程序。Android SDK 提供了在Android平臺使用java語言進行android 應用程序開發必須的工具和API接口。Android 系統架構除了Linux2.6內核之外,還提供了豐富的lib和適用于java的運行時環境(很重要的一點是Dalvik虛擬機,類似于JVM)、應用程序框架和核心應用。在此基礎之上可以快速開發應用程序。

            linux內核像是核心技術支持,而google 將其商業化于移動設備上。android上開發應用程序和Windows MFC開發有些類似。


4、Q:SDK升級了,如何更新SDK?

       A:更新SDK是非常棘手的。當一個新的SDK發布,必須是plugin也發布。更新容易出現的錯誤是兩個版本都存在,而且都不正常。最終不得不卸載了它們并且重新安裝最新的一個。然后那個最新的SDK工作正常了。建議任何面對SDK或者plugin升級的人都采用相同的過程。簡單的卸載老版本,然后安裝新版本。不要升級。


5、Q:如何進入Recovery模式
  
       A:每部Android設備進入Recovery模式的方法不同。以Milestone為例:若bootloader為90.78,按住鍵盤的“X”鍵,再按電源鍵開機,看到moto的經典logo即可放開此2鍵。等待出現一個三角形圖標,然后按住音量向上鍵+輕按拍照鍵,會出現四個選項。放開按鍵,可以用方向鍵選擇一個選項。作用分別為重啟,應用update.zip,清除所有數據至出廠狀態、清除cache。

6、Q:Android bionic移植需要注意的事項
      A:下面通過一個例子來說明移植binic需要做的事情(BIONIC使用的內核頭文件從2.6.29 升級到 2.6.31):
          1)修改之前,先要備份 android/bionic

           2)按照下面方法復制linux kernel v2.6.31 頭文件:
                復制 include/asm-generic 到 bionic/libc/kernel/original folder
                復制 include/linux 到 bionic/libc/kernel/original folder
                復制 include/mtd 到 bionic/libc/kernel/original folder

          3)運行 tools/update_all.py 腳本,生成新的頭文件,方法如下.
               $ cd android/bionic/libc/kernel
               $ tools/update_all.py
               以上的操作將復制新的頭文件到 bionic/libc/kernel/common 目錄

          4)刪除 bionic/libc/kernel/original 目錄

          5)復制平臺相關的頭文件:
              復制 linux v2.6.31 平臺相關的 asm 目錄到指定的路徑,方法如下:
              復制 arch/arm/include/asm 到 android/bionic/libc/kernel/arch-arm/
              復制 arch/x86/include/asm 到 android/bionic/libc/kernel/arch-x86/

           6)從 v2.6.29 bionic/libc/kernel/common/linux 復制一下的頭文件到新的 android/bionic/libc/kernel/common/linux 目錄:
                android-alarm.h
                android-pmem.h
                android_power.h
                ashmem.h
                binder.h
                msm_adsp.h
                msm_audio.h
                msm_mdp.h
                keychord.h

           7)編譯
               $ cd android
               $ make -j4


7、Q:Android源碼下vendor目錄下文件的作用?
 
       A:指的是某些公司的產品型號,主要是一些針對硬件配置的東西,比如radio 方面的,若是采用TI 的,這里面會有TI提供的一些RIL方面的接口等。


8、Q:編譯Android源碼和編譯Android內核有什么區別?

      A:其實沒什么區別,就多了幾個android特有的驅動,最重要的是binder


9、Q:如何獲取手機和存儲卡上的圖片?
 
      A:

    /**

    * 通過uri獲取文件的絕對路徑 

    * @param uri 

    * @return 

    */  

       protected String getAbsoluteImagePath(Uri uri)   

   {  

       // can post image  

       String [] proj={MediaStore.Images.Media.DATA};  

       Cursor cursor = managedQuery( uri,  

                       proj,                 // Which columns to return  

                       null,       // WHERE clause; which rows to return (all rows)  

                       null,       // WHERE clause selection arguments (none)  

                       null);                 // Order-by clause (ascending by name)  



       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  

       cursor.moveToFirst();  



       return cursor.getString(column_index);  

   }  

}</pre>

10、Q:如何使用雙緩沖?
         
          A:系統自身已經實現了雙緩沖,也就是說為了避免重影,必須連續onDraw兩次,或者是對上一次onDraw里面畫臟的部分進行修復。
                執行Bitmap.createBitmap函數一般要花銷100-300ms的時間,要想提高它的效率,只能祈禱google能把android的代碼寫得更高效一些了

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!