Android開發(fā)技術文檔_第1頁
Android開發(fā)技術文檔_第2頁
Android開發(fā)技術文檔_第3頁
Android開發(fā)技術文檔_第4頁
Android開發(fā)技術文檔_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、An droid開發(fā)最佳實踐從FUturiCe公司Android開發(fā)者中學到的經(jīng)驗。遵循以下準則,避免重復發(fā)明輪子。若您對開發(fā)iOS或 Windows PhOne 有興趣,請看iOS Good PraCtiCeS 和 Windows client Good PraCtiCeS 這兩篇文章。摘要?使用GradIe和它推薦的工程結構? 把密碼和敏感數(shù)據(jù)放在perties? 不要自己寫HTTP客戶端,使用Volley或OkHttP庫? 使用JaCkSOn庫解析JSON數(shù)據(jù)? 避免使用GUaVa同時使用一些類庫來避免 65k method limit (一個Android程序中最多

2、能執(zhí)行65536個方法)? 使用Fragments來呈現(xiàn)Ul視圖? 使用ACtiVitieS只是為了管理Fragments? LayOUt布局是XMLS代碼,組織好它們? 在layoutout XMLS布局時,使用StyIeS文件來避免使用重復的屬性?使用多個style文件來避免單一的一個大style文件?保持你的colors.xml簡短DRY(不要重復自己),只是定義調色板?總是使用dimens.xml DRY(不要重復自己),定義通用常數(shù)? 不要做一個深層次的VieWGrOUP?在使用WebVieWS時避免在客戶端做處理,當心內存泄露? 使用Robolectric單元測試,Robotium

3、 做UI測試?使用Genymotion作為你的模擬器? 總是使用PrOGUard和DeXGUard混淆來項目An droid SDK將你的Android SDK放在你的home目錄或其他應用程序無關的位置。當安裝有些包含SDK的IDE的時候,可能會將SDK放在IDE同一目錄下,當你需要 升級(或重新安裝)IDE或更換的IDE時,會非常麻煩。此外,若果你的IDE 是在普通用戶,不是在root下運行,還要避免吧SDK放到一下需要sudo權限 的系統(tǒng)級別目錄下。構建系統(tǒng)你的默認編譯環(huán)境應該是 Gradle. Ant有很多限制,也很冗余。使用 Gradle, 完成以下工作很方便:?構建APP不同版本的

4、變種?制作簡單類似腳本的任務?管理和下載依賴?自定義秘鑰? 更多同時,Android GradIe插件作為新標準的構建系統(tǒng)正在被Google積極的開發(fā)。工程結構有兩種流行的結構:老的 Ant & ECIiPSe ADT工程結構,和新的 GradIe &Android StUdiO工程結構,你應該選擇新的工程結構,如果你的工程還在使用 老的結構,考慮放棄吧,將工程移植到新的結構。老的結構:old-structureI assetsI libsI resI SrCI1 com/futurice/PrOjeCtIn droidMa ni fest.xmlI build.gradleI

5、 PrOjeCperties1 PrOgUard -新的結構new-structureI Iibrary -foobarIappIIlibsIISrCIIIan droidTestII1 com/futurice/PrOjeCtI1mai nIIjavaI I1 com/futurice/PrOjeCtIIresI1An droidMa ni fest.xmlI build.gradle1 PrOgUarCirUI build.gradle Sett in gs.gradle主要的區(qū)別在于,新的結構明確的分開了'source sets'

6、( main ,androidTest ),GradIe的一個理念。 你可以做到,例如,添加源組 Pa和 fre在SrC中,這將成為您的應用程序的付費和免費的兩種模式的源代碼。你的項目引用第三方項目庫時(例如,Iibrary-foobar ),擁有一個頂級包名app 從第三方庫項目區(qū)分你的應用程序是非常有用的。然后Settings.gradle 不斷引用這些庫項目,其中app/build.gradle 可以引用。GradIe配置常用結構 參考 Google's guide On GradIe for Android小任務除了 (shell, PythOn, Perl, etc)這些腳本

7、語言,你也可以使用GradIe制作任務。更多信息請參考Gradle's documentation 。密碼在做版本release時你app的build.gradle 你需要定義SigningConfigs.此時你應該避免以下內容:不要做這個.這會出現(xiàn)在版本控制中。"myapp.keystore" )Sig ningCon figs release store(StOrePaSSWOrd keyAIias keyPassword"password123""thekey""password789"而是,建立一個

8、不加入版本控制系統(tǒng)的perties 文件。KEYSTORE_PASSWORD=PaSSWord123KEY_PASSWORD=PaSSWOrd789那個文件是gradle自動引入的,你可以在buld.gradle 文件中使用,例如:Sig ningCon figs release try store(StOrePaSSWOrd keyAIias keyPasswordCatCh (ex) throw"myapp.keystore" )KEYSTORE_PASSWORD"thekey"KEY_PASSWORDnew InVaIidUSe

9、rDataEXCePtiOn("You should defineKEYSTORE_PASSWORD and KEY_PASSWORD in perties.")使用MaVen依賴方案代替使用導入jar包方案 如果在你的項目中你明確使用 率jar文件,那么它們可能成為永久的版本,如2.1.1 .下載jar包更新他們是很繁瑣的,這個問題MaVen很好的解決了,這在 Android GradIe構建中也是推 薦的方法。你可 以指定版本的一個范圍,如2.1.+ ,然后MaVen會自動升級到制 定的最新版本,例如:depe nden CieS compile&#

10、39;com. netflix.rxjava:rxjava-core:0.19.+'compile'com. netflix.rxjava:rxjava-a ndroid:0.19.+'compile'com.fasterxml.jacks on .core:jacks on-databi nd:2.4.+'compile'com.fasterxml.jacks on .core:jacks on-COre:2.4.+'compile'com.fasterxml.jacks on .core:jacks on-ann otatio

11、 ns:2.4.+'compile'com.squareup.okhttp:OkhttP:2.0.+'compile'com.squareup.okhttp:OkhttP-UrIC onn ecti on: 2.0.+'IDES and text editorsIDE集成開發(fā)環(huán)境和文本編輯器無論使用什么編輯器,一定要構建一個良好的工程結構編輯器每個人都有自己的選擇,讓你的編輯器根據(jù)工程結構和構建系統(tǒng)運作,那是你自己的責任。當下首推Android Studio ,因為他是由谷歌開發(fā),最接近 GradIe ,默認使用最新 的工程結構,已經(jīng)到beta階段(目前

12、已經(jīng)有release 1.0 了),它就是為Android開發(fā)定制的。你也可以使用ECIiPSe ADT ,但是你需要對它進行配置,因為它使用了舊的工 程結構 和Ant作為構建系統(tǒng)。你甚至可以使用純文版編輯器如Vim, SUbIimeTeXt ,或者EmaCS。如果那樣的話,你需要使用GardIe和adb命令行。如果使用ECIiPSe集成GradIe不適合你,你只是使用命令行構建工程,或遷移到Android StUdiO 中來吧。無論你使用何種開發(fā)工具,只要確保GradIe和新的項目結構保持官方的方式構建應用程序,避免你的編輯器配置文件加入到版本控制。例如,避免加入Ant build.xml

13、文件。特別如果你改變Ant的配置,不要忘記保持build.gradle 是最新和起作用的。同時,善待其他開發(fā)者,不要強制改變他們的開發(fā)工具和 偏好。類庫JaCkSOn是一個將java對象轉換成JSON與JSON轉化java類的類庫。Gson是解決這個問題的流行方案,然而我們發(fā)現(xiàn)JaCkSon更高效,因為它支持替代的方法處理JSON:流、內存樹模型,和傳統(tǒng)JSoN-PoJo數(shù)據(jù)綁定。不過, 請記住,JSonkson庫比起GSoN更大,所以根據(jù)你的情況選擇,你可能選擇GSoN來避免APP 65k個方法限制。其它選擇:JSOn-Smart and Boon JSON網(wǎng)絡請求,緩存,圖片 執(zhí)行請求后端

14、服務器,有幾種交互的解決方案,你應該 考慮實現(xiàn)你自己的網(wǎng)絡客戶端。使用VOlley或Retrofit。Volley同時提供圖片緩存類。若果你選擇使用 Retrofit,那么考慮使用PiCaSSO來加載圖片和緩存, 同時使用OkHttP作為高效的網(wǎng)絡請求。RetrOfit,PiCaSSO和OkHttP都是有同 一家公司開發(fā)(注: 是由SqUare公司開發(fā)),所以它們能很好的在一起運行。 OkHttP同樣可以和VOiley在一起使用Volley.RXJaVa是函數(shù)式反應性的一個類庫,換句話說,能處理異步的事件。這是一個強大的和有前途的模式,同時也可能會造成混淆,因為它是如此的不同。我們建議在使用這

15、個庫架構整個應用程序之前要謹慎考慮。有一些項目是使用RXJaVa完成的,如果你需要幫助可以跟這些人取得聯(lián)系:Timo Tuominen,Olli Saionen, Andre Medeiros, Mark Voit, Antti Lammi, Vera IZrailit, JUha RiStolainen.我們也寫了一些博客:1, 2, 3, 4.如若你之前有使用過RX的經(jīng)歷,開始從API響應應用它。另外,從簡單的Ul 事件處理開始運用,如單擊事件或在搜索欄輸入事件。若對你的RX技術有信心,同時想要將它應用到你的整體架構中,那么請在復雜的部分寫好JaVadOCS文檔。請記住其他不熟悉RXJaV

16、a的開發(fā)人員,可能會非常難理解整個項目。 盡你的的全力幫助他們理解你的代碼和RX。RetrOiambda 是一個在Android和預JDK8平臺上的使用Lambda表達式語法 的JaVa類庫。它有助于保持你代碼的緊湊性和可讀性,特別當你使用如RXJaVa函數(shù)風格編程時。使用它時先安裝JDK8 ,在Android StUdiO工程結構對話框中把它設置成為SDK路徑,同時設置JAVA8_HOME和JAVA7_HOME環(huán)境變 量,然后在工程根目錄下配置 build.gradle :depe nden CieS CiaSSPath'me.tatarka:gradle-retrolambda:2

17、4+'同時在每個 module的build.gradle中添加apply PiUgin : 'retrolambda'an droid COmPiieOPti ons SOUrCeCOmPatibiiityJaVaVerSiO n.VERSION_1_8targetcompatibilityJaVaVerSiO n.VERSION_1_8 jdk System. getenv( "JAVA8_H0ME")OIdJdk System. getenv( "JAVA7_HOME")javaVersionJaVaVerSiO n.VERS

18、IoN_1_7 Android StUdiO 提供Java8 IambdaS表帶是代碼提示支持。如果你對IambdaS不熟悉,只需參照以下開始學習吧:? 任何只包含一個接口的方法都是"lambda friendly"同時代碼可以被折疊成 更緊湊的語法?如果對參數(shù)或類似有疑問,就寫一個普通的匿名內部類,然后讓Android StatUS 為你生成一個 Iambda。當心dex方法數(shù)限制,同時避免使用過多的類庫Android apps ,當打包成一個dex文件時,有一個65535個應用方法強硬限制1 2 3。當你突破65k限制 之后你會看到一個致命錯誤。因此,使用一個正常范圍的

19、類庫文件,同時使用 dex-method-counts工具來決定哪些類庫可以再65k限制之下使用,特別的避 免使用GUaVa類庫,因為它包含超過13k個方法。ACtiVitieS and Fragme ntsFragments應該作為你實現(xiàn)UI界面默認選擇。你可以重復使用 Fragments用 戶接口來組合成你的應用。我們強烈推薦使用 Fragments而不是activity來呈 現(xiàn)UI界面,理由如下:?提供多窗格布局解決方案Fragments的引入主要將手機應用延伸到平板 電腦,所以在平板電腦上你可能有 A、B兩個窗格,但是在手機應用上A、B可能分別充滿整個屏幕。如果你的應用在最初就使用了f

20、ragments,那么以后將你的應用適配到其他不同尺寸屏幕就會非常簡單。?屏幕間數(shù)據(jù)通信 從一個ACtiVity發(fā)送復雜數(shù)據(jù)(例如JaVa對象)到另外一個ACtiVity,Android的API并沒有提供合適的方法。不過使用Fragment ,你可以使用一個 activity 實例作為這個 activity 子fragments的通信通道。即使這樣比 ACtiVity與ACtiVity間的通信好,你也想考慮使用EVent BUS架構,使用如 OttO或者greenrobot EVentBus 作為更簡潔的實現(xiàn)。如果你希望避免添加另外一個類庫,RXJaVa同樣可以實現(xiàn)一 個 EVent BUS。

21、? Fragments 般通用的不只有UI你可以有一個沒有界面的fragment作為ACtiVity提供后臺工作。進一步你可以使用這個特性來創(chuàng)建一個fragment包含改變其它fragment的邏輯而不是把這個邏輯放在 activity 中。? 甚至ActionBar都可以使用內部fragment來管理你可以選擇使用一個 沒有Ul界面的fragment來專門管理ActionBar,或者你可以選擇使用在 每個Fragment中添加它自己的action來作為父ACtiVity的ActionBar.很不幸,我們不建議廣泛的使用嵌套的fragments ,因為有時會引起matryoshka bugs。

22、我們只有當它有意義(例如,在水平滑動的 VieWPager在像 屏幕一樣fragment中)或者他的確是一個明智的選擇的時候才廣泛的使用 fragment。在一個架構級別,你的APP應該有一個頂級的activity來包含絕大部分業(yè)務相 關的fragment。你也可能還有一些輔助的 activity ,這些輔助的activity與主 activity通信很簡單限制在這兩種方法Intent.setData()或Intent.setAction()或類似的方法。JaVa包結構Android應用程序在架構上大致是 JaVa中的MOdeI-VieW-COntroller結構。在 Android中Frag

23、ment和ACtiVity通常上是控制器類().換句話說,他們是用戶接 口的部分,同樣也是VieWS視圖的部分。正是因為如此,才很難嚴格的將 fragments (或者activities)嚴格的劃分成 控制 器COntrolloers還是視圖VieWS。 最還是將它們放在自己單獨的 fragments 包中。 只要你遵循之前提到的建議,ACtiVitieS則可以放在頂級目錄下。若果你規(guī)劃有2到3個以上的activity ,那么還是同樣新建一個activities 包吧。然而,這種架構可以看做是另一種形式的MVC,包含要被解析API響應的JSoN數(shù)據(jù),來填充的POJO的models包中。和一個

24、VieWS包來包含你的自定 義視圖、通知、導航視圖,WidgetS等等。適配器AdaPter是在數(shù)據(jù)和視圖之 間。然而他們通常需要通過getView()方法來導出一些視圖,所以你可以將adapters 包放在VieWS 包里面。一些控制器角色的類是應用程序級別的,同時是接近系統(tǒng)的。這些類放在managers包下面。一些繁雜的數(shù)據(jù)處理類,比如說"DateUtiIs",放在utils 包下 面。與后端交互負責網(wǎng)絡處理類,放在 n etwork包下面??偠灾宰罱咏脩舳皇亲罱咏蠖巳グ才潘麄?。n etwork models man agers utils fragme n

25、ts VieWSadapters action barWidgetS no tificati ons資源文件Resources?命名遵循前綴表明類型的習慣,形如type_foo_bar.xml。例如:fragme nt_con tact_details.xml,view_Primary_butt on .xml, activity_ma in .xml .組織布局文件若果你不確定如何排版一個布局文件,遵循一下規(guī)則可能會有幫 助。?每一個屬性一行,縮進4個空格? an droid:id總是作為第一個屬性? an droid:layout_*屬性在上邊? style屬性在底部?關閉標簽/單獨起一行

26、,有助于調整和添加新的屬性? 考慮使用DeSigntime attributes 設計時布局屬性,Android StUdiO已經(jīng) 提供支持,而不是硬編碼an droid:text(譯者注:墻內也可以參考StOrmZhang的這篇博客 鏈接)。<?xml VerSiOn ="1.0"encoding="utf-8"?>BnlIVLin earLayoutxmln s:a ndroid="match_Pare nt" ="match_Pare nt" = "vertical"xmln

27、s:tools =""an droid:layout_Widthan droid:layout_heightan droid:orie ntatio nV TeXtVieWan droid:id="+id/name"an droid:layout_Width="match_Pare nt"an droid:layout_height="wrap_c onten t"an droid:layout_alig nPare ntRight="true"an droid:text="Str i

28、ng/n ame"style ="style/Fa ncyText"/>Vin cludelayout ="layout/reusable_part"/>作為一個經(jīng)驗法則,android:IayoUt_*屬性應該在layout XML中定義,同時其它屬性an droid:* 應放在StyIer XML中。此規(guī)則也有例外,不過大體工作的很好。這個思想整體是保持 layout屬性(POSitioning, margin, SiZing) 和 COntent 屬性在布局文件中,同時將所有的外觀細節(jié)屬性(colors, Padding, f

29、ont )放在 style文件中。例外有以下這些:? android:id明顯應該在IayOUt文件中? layout 文件中 android:orientation對于一個 LinearLayout 布局通常更有意義? android:text由于是定義內容,應該放在layout文件中?有時候將 android:layout_Width和 android:layout_height屬性放到一個style中作為一個通用的風格中更有意義,但是默認情況下這些應該放到 layout文件中。使用StyIeS幾乎每個項目都需要適當?shù)氖褂?style文件,因為對于一個視圖來 說有一個重復的外觀是很常見的。

30、在應用中對于大多數(shù)文本內容,最起碼你應該有一個通用的style文件,例如:<stylen ame="C onten tText">V item name="android:textSize">dimen/font_normal</item >V item name="android:textColor">color/basic_black</ item ></ style >應用到TeXtVieW中:VTeXtVieWan droid:layout_Width="w

31、rap_c on te nt"an droid:layout_height="wrap_c Ontent"an droid:text="Stri ng/price"style ="style/Co nte ntText"/>你或許需要為按鈕控件做同樣的事情,不要停止在那里。將一組相關的和重復an droid:*的屬性放到一個通用的 Style中。將一個大的Style文件分割成多個文件你可以有多個StyIeS.xml文件。Android SDK支持其它文件,StyIeS這個文件名稱并沒有作用,起作用的是在 文件里Xml的

32、VStyle>標簽。因此你可以有多個style文件StyIeS.xml ,style_home.xml ,style_item_details.xml,styles_forms.xml。不用于資源文件路徑需要為系統(tǒng)構建起的有意義,在res/values目錄下的文件可以任意命名。ColorS.xml是一個調色板在你的colors.xml文件中應該只是映射顏色的名稱一個RGBA值,而沒有其它的。不要使用它為不同的按鈕來定義RGBA值不要這樣做VreSOUrCeS >V colorname="button_foreground">#FFFFFF</ col

33、or >V colorname="button_background">#2A91BD</ color >V colorname="comment_baCkgrOUnd_inactive">#5F5F5F</ color >V colorname="comment_baCkgrOUnd_active">#939393</ color >V colorname="comment_foreground">#FFFFFFv/ color >V col

34、orname="comment_foreground_important">#FF9D2Fv/ color >V colorname="comment_shadow" >#323232v/ color >使用這種格式,你會非常容易的開始重復定義 RGBA值,這使如果需要改變基 本色變的很復雜。同時,這些定義是跟一些環(huán)境關聯(lián)起來的,如butt on或者comme nt,應該放到一個按鈕風格中,而不是在 color.xml 文件中。相反,這樣做:VreSOUrCeS >v!- grayScale ->Vcolorn ame

35、="white">#FFFFFFv/color>Vcolorn ame="gray_light">#DBDBDBV/color>Vcolorn ame="gray">#939393</color>Vcolorn ame="gray_dark">#5F5F5F</color>Vcolorn ame="black">#323232</color>v!- baSic colorS ->V color name=&quo

36、t;green" >#27D34Dv/ color >V color name="blue" >#2A91BDv/ color >V colorname="orange" >#FF9D2Fv/ color >V color name="red" >#FF432F</ color >v/ resources >向應用設計者那里要這個調色板,名稱不需要跟"green", "blue",等等相同。"bra nd_prima

37、ry", "bra nd_sec on dary", "bra nd_n egative"這樣的名字也是完全可以接受的。像這樣規(guī)范的顏色很容易修改或重構,會使應用一共使用了多少種 不同的顏色變得非常清晰。通常一個具有審美價值的Ul來說,減少使用顏色 的種類是非常重要的。像對待colors.xml 一樣對待dimens.xml文件與定義顏色調色板一樣,你同 時也應該定義一個空隙間隔和字體大小的調色板” 一個好的例子,如下所示:VreSOUrCeS ><!- font SiZeS ->>22sp</ dimen >

38、;>18sp</ dimen >V dime n n ame="fo nt_larger"V dime n n ame="fo nt_large"Vdime nn ame= "font_no rmal">15sp</ dimen >Vdime nn ame="fo nt_small">12sp</ dimen >v!- typical SPaC ing betwee n two VieWS ->Vdime nn ame= "spac in g_h

39、uge">40dp</ dimen >Vdime nn ame= "spac in g_large">24dp</ dimen >Vdime nn ame= "spaci ng_n ormalH>14dp</ dimen >Vdime nn ame= "spac in g_small">10dp</ dimen >Vdime nn ame= "spac in g_ti ny">4dp</ dimen ><!- typic

40、al SiZeS Of VieWS ->Vdime nn ame= "butt on _height_tall">60dp</ dimen >Vdime nn ame= "butt on _height_ no rmal">40dp</ dimen >Vdime nn ame= "butt on _height_short">32dp</ dimen >v/ resources>布局時在寫 margins 和Paddings 時,你應該使用 SPaCing_*尺寸格式來

41、布局,而不是像對待String字符串一樣直接寫值。這樣寫會非常有感覺,會使組織和 改變風格或布局是非常容易。避免深層次的視圖結構有時候為了擺放一個視圖,你可能嘗試添加另一個LinearLayout。你可能使用這種方法解決:="match_Pare nt" ="match_Pare nt" = "vertical"VLin earLayoutan droid:IayOUt_width an droid:layout_height an droid:orie ntatio n>V ReIatiVeLayOUt>VLin ear

42、Layout>VLin earLayout>VLin earLayout>v/Lin earLayout>v/Lin earLayout>v/Lin earLayout>v/ReIatiVeLayOUt>v/ LinearLayout>即使你沒有非常明確的在一個layout布局文件中這樣使用,如果你在 JaVa文 件中從一個VieW inflate (這個inflate翻譯不過去,大家理解就行)到其他VieWS當中,也是可能會發(fā)生的??赡軙е乱幌盗械膯栴}。你可能會遇到性能問題,因為處理起需要處理一個 復雜的Ul樹結構。還可能會導致以下更嚴重的問

43、題 StaCkOVerfloWErrOr .因此盡量保持你的視圖tree:學習如何使用ReIatiVeLayOUt ,如何OPtimiZe你 的布局和如何使用merge標簽.小心關于WebVieWS的問題.如果你必須顯示一個Web視圖,比如說對于一個 新聞文章,避免做客戶端處理 HTML的工作,最好讓后端工程師協(xié)助,讓他返 回一個"純"HTML。WebVieWS也能導致內存泄露 當保持引他們的ACtiVity, 而不是被綁定到APPIiCatiOnContext中的時候。當使用簡單的文字或按鈕時, 避免使用 WebVieW ,這時使用TeXtVieW或Buttons更好。測

44、試框架Android SDK的測試框架還處于初級階段,特別是關于 UI測試方面。Android GradIe目前實現(xiàn)了一個叫connectedAndroidTest的測試,它使用一個JUnit為Android 提供的擴展插件 extension of JUnit With helpers for Android .可以跑你 生成的JUnit測試,只當做單元測試時使用 Robolectric ,VieWS不用它是一個最求提供"不連接 設備的"為了加速開發(fā)的測試,非常時候做models和VieW models的單元測試然而,使用Robolectric測試時不精確的,也不完全對

45、UI測試。當你對有關動 畫的UI元素、對話框等,測試時會有問題,這主要是因為你是在 在黑暗中工作”(在沒有可控的界面情況下測試)solo . SendKey(Solo solo . clickOnText( CIiCkS on itsolo . clickOnText( solo . clickOnText(*Robotium使寫UI測試非常簡單。*對于UI測試你不需Robotium跑與設備 連接的測試。但它可能會對你有益,是因為它有許多來幫助類的獲得和分析視 圖,控制屏幕。測試用例看起來像這樣簡單:.MENU;"More" );/ SearCheS for the fir

46、st occurence of "More" and"Prefere nces");"Edit ");ASSert . assertTrue(solo . SearChText("rtf" );模擬器 如果你全職開發(fā) Android App,那么買一個 Genymotion emulator IiCense 吧。Genymotion模擬器運行更快的秒幀的速度,比起典型的AVD模擬器。他有演示你APP的工具,高質量的模擬網(wǎng)絡連接,GPS位置,等等。它同時還有理想的連接測試。你若涉及適配使用很多不同的設備,買一個 Ge

47、nymotion版權 是比你買很多真設備便宜多的。注意:Genymotion模擬器沒有裝載所有的 Google服務,如Google PlayStore和MaPS。你也可能需 要測試SamSUng指定的API ,若這樣的話你還是 需要購買一個真實的SamSUng設備?;煜渲肞rOGUard是一個在Android項目中廣泛使用的壓縮和混淆打包的源碼的工具。你是否使用PrOGUard取決你項目的配置,當你構建一個 release版本的apk 時,通常你應該配置gradle文件。buildTypes debug minifyEn abledfalserelease SigningConfig SigningConfigs. releaseminifyEn abledtruePrOgUardFiIeS''為了決定哪些代碼應該被保留,哪些代碼應該被混淆

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論