1. 程式人生 > >Android中關於gradled的理解以及如何簽名和打包

Android中關於gradled的理解以及如何簽名和打包

目錄:

1、gradle的概念

2、gradle配置jar包,和libs資料夾匯入jar包的區別

3、簽名打包:

    (1)Studio

    (2)命令列

    (3)gradle wrapper的原理

4、BuildConfig的使用

5、簡單介紹module中build.gradle檔案引數含義

一、gradle的概念:

  • gradle是一個構建工具
  • gradle是以Groovy語言為基礎的
  • gradle主要面向的是Java語言

開啟Android Studio內建的終端,在輸入如下命令檢視gradle版本:

gradlew -v

如果是第一次執行這個命令,系統會幫我們下載gradle到本地,下載到的路徑是:

f0d528a1-b7cb-410d-978f-a5f975e24246

輸入上述命令後,檢視到gradle的版本2.2.1,如下圖所示:

74c0b9b1-ca40-49fc-bdbc-197c0786fa16

二、通過gradle來匯入jar包:

我們在上一篇文章中第二段的第3小節中講到了通過拷貝檔案到libs資料夾來匯入jar包。這次來講一下怎麼通過gradle來配置jar包。我們還是以谷歌的gjson.jar為例,如果之前已經通過拷貝檔案方式倒入過了,請先自行刪掉。

1、通過gradle配置第三方jar包

我們看到,每個module都有一個build.gradle檔案,它其實是對應module的配置檔案。關於build.gradle檔案中具體內容的含義,我們將在最後一段進行講解。

我們先來看一下名為app的這個module,它的build.gradle對應的圖形介面其實是下面這個Project Stucture:

a4eb5912-20cf-4f46-90ea-67bd27f192d8

上圖中,切換到dependencies標籤下,如下圖所示:

4f8405c6-942d-4ad1-af6c-680ed40089b9

上圖中,點選新增,然後選擇"Library dependency",彈出如下介面:

49c4a575-aec8-4f41-96c7-a667d5d1ddd7

上圖中,我們在搜尋框中輸入“gson”,然後確定,就彈出了箭頭處的我們需要的jar包,新增它即可:

646e1935-bdde-4429-9ff8-d70902d5b34f

之後我們會發現,app這個module的build.gradle中多了一行程式碼,表示引入了gson.jar:

b2841508-79d5-465d-ac3f-8ccc263b2008

其實,如果你能記得住上方這行程式碼,直接寫出程式碼來也是可以匯入的。

此時,gson這個jar包不再是出現在libs這個資料夾下了,而是出現在最下方的External Libraries中,如下圖所示:(而且是最新版本哦)

58f33bae-0e14-4d4c-886d-95811f4d88a0

2、gradle匯入jar包的特點:(和libs資料夾匯入jar包的區別)

  • gradle匯入jar包更方便,一行程式碼即可搞定。不像後者那樣還要自己去官方下載。
  • 如果官方將jar包更新了,我們只需要在build.gradle中改一下版本號就行了,不用重新去官網下載。

3、通過gradle匯入的jar包是從哪裡來的:

需要注意的是:不是所有的jar包都是可以通過gradle來匯入的。那通過gradle匯入的jar包是從哪裡來的呢?解釋如下:

我們發現HelloWorld這個project的目錄下有一個build.gradle檔案,開啟它:

b1590c7d-e046-46a5-a659-ee4ceb633054

上圖中第17行的"jcenter()"的意思是,所有通過gradle匯入的jar包都是從http://bintray.com/bintray/jcenter這個中央倉庫上扒下來的。如果你需要的jar包在這個網站上沒有,那就無法通過gradle的方式來匯入哦。

順便提一下,上圖中第8行的classpath中的gradle 1.1.0是android的一個gradle外掛(也是從中央倉庫扒下來的)。而我們自己使用的gradle版本如下圖所示:

452c7226-a262-4ccf-9b0f-8bd39ff59b42

我們自己下載好的gradle的路徑如下:

672d7347-1d2b-4acc-8dce-7ba3551357e8

三、簽名打包的兩種方式:

注:給我們自己開發的app簽名,就代表著我自己的版權,以後要進行升級,也必須要使用相同的簽名才行。簽名就代表著自己的身份(即keystore),多個app可以使用同一個簽名。

如果不知道簽名是啥意思,請自行百度哦。在eclipse中籤名的方法是:選中工程,郵件選擇"export-android-export android application",

1、方式1:通過Android Studio進行簽名:

選中app這個module,選擇選單欄"Build-Generate signed apk":

30d1daba-bdb4-4dde-9324-89293482a84e

彈出如下介面:

5a3058ac-cba2-44d1-84cf-b77b246bb4d1

上圖中,如果你是第一次使用簽名,就單擊紅框部分建立一個新的簽名;如果你之前有過簽名的檔案,就選擇藍框部分進行匯入即可。那我就先選擇紅框部分吧:

70ae6ac4-ed0b-4938-b3f5-229dba3fea29

3b69eb78-a2bc-408b-b49f-272b46b32a31

3ef16884-13b8-453f-bad5-b9dba1a667f7

f757b8aa-277b-45f0-9afd-403adc82082c

上圖中,點選"finish"之後,可以看到Android Studio的最下方顯示:Gradle正在執行assembleRelease這樣一個任務,如下圖所示:

bf6076fd-480d-48b4-bb1a-e2bfee785e5e

生成簽名好的apk之後,會彈出提示:

8b42d822-e3a2-4c66-aea4-6b2b4e83fef3

77cd9b25-b0f0-4f0b-85ec-c00b4e13b61b

2、方式2:通過命令列的方式進行簽名:

(1)載入Key Store:

我們先刪掉上面的通過第一種方式所簽名的apk檔案。接下來進行第二種方式來簽名,即命令列的方式。

開啟Project Stucture圖形化介面:

03458b6c-92b8-42be-ab1d-e2c3097570eb

d6d07e96-330b-40c6-bc22-32fc37391144

上圖中,選中app這個module,然後切換到singning標籤欄,緊接著點選新增,然後生成release簽名信息,緊接著點選"OK"。接著做如下操作:

c638147d-7741-4c63-9d3a-0066ac959219

上圖中,切換到Build Types標籤,將Signing config選擇為"release",即將剛剛生成的release簽名信息配置進去。

操作完成之後,我們可以看到app這個module的build.gradle檔案多出瞭如下紅框部分的程式碼:

f59c1858-e26a-41a4-96b5-f7e32eb6c8ac

然後執行選單欄的"build-clean Project":

a7af4c5b-23c2-4997-8d6f-47940c1a0f1c

(2)生成realease版本的apk:

緊接著在命令列Terminal輸入如下命令:(AS已經將命令列Terminal整合到了軟體當中)

gradlew assembleRelease

如果執行成功,效果如下:

74e21bb0-7afc-4bc6-9103-a4748f2003bf

生成的簽名好的apk在如下位置:

b8f81109-cf7f-4649-a4da-a4bb91a3c96a

3、為什麼要使用gradlew命令而不是gradle命令:

在HelloWorld工程目錄下有一個gradle資料夾,在gradle/wrapper目錄下有一個gradle-wrapper.properties檔案,開啟它:

c5bb106f-081e-40d8-816e-ea04a4814977

上圖代表著HelloWorld這個工程所依賴的gradle的版本資訊。上圖的紅線表示,如果我們的工程中沒有gradle,軟體會根據這個url去下載gradle,終於知道為啥第一次開啟AS時會這麼慢了吧?

如果我們執行了gradlew命令,實際上是執行上面的gradle wrapper,然後找到我們已經下載好的gradle 2.2.1。如果現在有很多個工程,但是每個工程的gradle版本都不一樣,我就必須要將每個版本的gradle都要配置到環境變數當中,而執行了gradlew命令,就會避免這個麻煩。

四、BuildConfig檔案:

BuildConfig是IDE自動生成的一個類,在elipse中即存放在gen目錄下(如R檔案)。而在Adroid Studio中,BuildConfig檔案存放的位置是:app/build/generated/source/buildconfig/dubug/<packagename>/BuildConfig.java中。如下圖所示:

42c80b8f-7e10-4e57-bacb-178a0ae4fc56

五、module中build.gradle檔案引數含義:

主要是module的build.gradle,截圖如下:

1518e471-4c75-4610-89f5-47ba9bc701f8

01行:apply plugin: 'com.android.application'    表示該module是這個應用程式的module

15行:applicationId "com.smyhvae.helloworld"    應用程式的包名

16、17行:向下相容的最小版本、編譯版本。    注:在app/src/main/AndroidManifest.xml中不再出現這個資訊了。

23行:需不需要利用24行的proguard檔案來混淆程式碼。在release狀態下,最好改為true。

下面的內容轉自stormzhang AndroidDeveloper的公眾號,歡迎關注

一:什麼是構建工具?

我們大家都知道 Gradle 是一種構建工具,那麼什麼是構建工具呢?    

網上一大堆的文字解釋我覺得很難理解,這裡我以咱們 Android 開發來舉個例子吧。    

我們以前開發都是用 Eclipse ,而 Eclipse 大家都知道是一種 IDE (整合開發環境),最初是用來做 Java 開發的,而 Android 是基於 Java 語言的,所以最初 Google 還是希望 Android 能在 Eclipse 上進行開發,為了滿足這個需求,Google 開發了一個叫 ADT (Android Developer Tools)的東西,相信以前從 Eclipse 時代過來的對 ADT 應該都不陌生,正是因為有了 ADT ,從此我們只需要碼好程式碼,然後直接在 Eclipse 上進行編譯、執行、簽名、打包等一系列流程,而這背後的工作都是 ADT 的功勞。某種意義上 ADT 就是我們的構建工具。    

而自 Google 推出 Android Studio 以來,就宣佈預設使用 Gradle 來作為構建工具,並且之後放棄更新 ADT ,從此 Gradle 走入 Android 開發者的視野,而我也是在 AS 的 Beta 版開始接觸並學習 Gradle。    

一般來說,構建工具除了以上提到的編譯、執行、簽名、打包等,還具備依賴管理的功能,什麼是依賴管理呢?還是拿 Eclipse 來說,我們以前在 Eclipse 上開發 Android ,如果需要用到第三方庫的時候一般都是先下載 jar 檔案,然後把 jar 檔案新增到 libs 目錄,然後專案中就可以引用了。但是你不覺得這種管理方式很麻煩麼?假設第三方庫有更新,需要下載最新的 Jar 檔案,然後替換掉原來的,引用的庫少還好,一旦引用的第三方庫多,那簡直麻煩死,可以說這種方式只有依賴,而沒有管理。    

現在大家不陌生的 Gradle 引用第三方庫方式是這樣的:    

compile 'com.android.support:support-v4:24.0.1'    

類似這樣的依賴方式,是不是很方便?而且很直觀,直接可以看到源地址,升級的話直接改下版本號就可以了,這就是所謂的依賴管理。    

所以構建工具就是對你的專案進行編譯、執行、簽名、打包、依賴管理等一系列功能的合集,傳統的構建工具有 Make、Ant、Maven、Ivy等,而 Gradle 是新一代的自動化構建工具。    

3  什麼是 Gradle ?            

上面說了,Gradle 是新一代的自動化構建工具,它是一個獨立的專案,跟 AS、Android 無關,官方網站:https://gradle.org/ , 類似 Ant、Maven這類構建工具都是基於 xml 來進行描述的,很臃腫,而 Gradle 採用的是一種叫做 Groovy 的語言,語法跟 Java 語法很像,但是是一種動態語言,而且在 Java 基礎上做了不少改進,用起來更加簡潔、靈活,而且 Gradle 完全相容 Maven、Ivy,這點基本上宣佈了 Maven、Ivy 可以被拋棄了,Gradle 的推出主要以 Java 應用為主,當然目前還支援 Android、C、C++。    

4   Gradle 與 Android Studio 的關係            

上面也提到,Gradle 跟 Android Studio 其實沒有關係,但是 Gradle 官方還是很看重 Android 開發的,Google 在推出 AS 的時候選中了 Gradle 作為構建工具,為了支援 Gradle 能在 AS 上使用,Google 做了個 AS 的外掛叫 Android Gradle Plugin  ,所以我們能在 AS 上使用 Gradle 完全是因為這個外掛的原因。在專案的根目錄有個 build.gradle 檔案,裡面有這麼一句程式碼:    

classpath 'com.android.tools.build:gradle:2.1.2'    

這個就是依賴 gradle 外掛的程式碼,後面的版本號代表的是 android gradle plugin 的版本,而不是 Gradle 的版本,這個是 Google 定的,跟 Gradle 官方沒關係。關於 android gradle plugin 的更多資訊可以到這裡檢視,這裡列舉了 android gradle plugin 每個版本的具體變化與具體功能:    

http://tools.android.com/tech-docs/new-build-system    

友情提示,需要科學上網!    

5 Gradle Wrapper            

現在預設新建一個專案,然後點選 AS 上的執行,預設就會直接幫你安裝 Gradle ,我們不需要額外的安裝 Gradle 了,但是其實這個 Gradle 不是真正的 Gradle ,他叫 Gradle Wrapper ,意為 Gradle 的包裝,什麼意思呢?假設我們本地有多個專案,一個是比較老的專案,還用著 Gradle 1.0 的版本,一個是比較新的專案用了 Gradle 2.0 的版本,但是你兩個專案肯定都想要同時執行的,如果你只裝了 Gradle 1.0 的話那肯定不行,所以為了解決這個問題,Google 推出了 Gradle Wrapper 的概念,就是他在你每個專案都配置了一個指定版本的 Gradle ,你可以理解為每個 Android 專案本地都有一個小型的 Gradle ,通過這個每個專案你可以支援用不同的 Gradle 版本來構建專案。    

理解了 Gradle Wrapper 的概念就好辦了,以下的所有操作都是基於 Gradle Wrapper 的。    

預設我們在 AS 上第一次建立專案會自動下載 Gradle 的,這個過程很漫長,出奇的慢,但是第一次之後就ok了,接下來就是教大家用命令列測試下,請大家在終端或者 AS 帶的終端上切換到所在專案的目錄,然後輸入 ./gradlew -v (win使用者直接輸入 gradlew -v) ,即可以檢視當前專案所用的 gradle 的版本,gradlew 即為 gradle wrapper 的縮寫,如果你是第一次執行命令列,那麼會出現一個下載的提示,緊接著會列印一個個的點,這個過程很漫長,依賴你的網速,時間幾分鐘到幾十分鐘不等。   

有人有疑問,我 AS 上明明已經可以正常執行該專案的,說明 Gradle 已經下載過了,為什麼命令列還要再下載一次?我也一直有這個疑問,理論上是不該再下載的,但是事實他就是要重新下載一次,我猜測可能是bug吧。    

如果下載完成輸入 ./gradlew -v 出現如下結果,證明你的專案是ok的,否則就是你的專案配置有問題了。    


   

6  Android 專案包含的 Gradle 配置檔案            

這裡姑且以我很早在 GitHub 開源的 9GAG 專案為例,來稍微介紹下一個完整的 Android 專案包含的基本 Gradle 相關的配置檔案:    


   

紅色標記部分從上到下咱們來一步步分析:    

9GAG/app/build.gradle    

這個檔案是 app 資料夾下這個 Module 的 gradle 配置檔案,也可以算是整個專案最主要的 gradle 配置檔案,具體裡面的配置以後再介紹。    

9GAG/extras/ShimmerAndroid/build.gradle    

每一個 Module 都需要有一個 gradle 配置檔案,語法都是一樣,唯一不同的是開頭宣告的是    

apply plugin: ‘com.android.library’    

9GAG/gradle    

這個目錄下有個 wrapper 資料夾,裡面可以看到有兩個檔案,我們主要看下 gradle-wrapper.properties 這個檔案的內容:    


   

可以看到裡面聲明瞭 gradle 的目錄與下載路徑以及當前專案使用的 gradle 版本,這些預設的路徑我們一般不會更改的,這個檔案裡指明的 gradle 版本不對也是很多導包不成功的原因之一。    

9GAG/build.gradle    

這個檔案是整個專案的 gradle 基礎配置檔案,預設的內容就是聲明瞭 android gradle plugin 的版本。    

9GAG/settings.gradle    

這個檔案是全域性的專案配置檔案,裡面主要宣告一些需要加入 gradle 的 module,我們來看看 9GAG 該檔案的內容:    


   

7  如何正確匯入下載的開源專案?            

我們經常會在 GitHub 發現一些優秀的開源專案,然後想要下載學習,然而第一步一般都是把原始碼匯入到 AS 裡,然後執行起來看下效果,但是經常會執行失敗,這裡我來給大家說下匯入開源專案的正確姿勢:    

下載一個Demo,先開啟每個 module下的 gradle 檔案,即 app 目錄下的 build.gradle 以及各個 library 下的 build.gradle ,首先檢視 compileSdkVersion 和 buildToolsVersion,因為有些時候你本地的版本和下載的版本不一致,那麼就會導致失敗。    

然後就是檢查 gradle-wrapper ,Google 有些時候要求不同的 AS 支援不同的 gradle 版本。比如 AS 1.0 的時候要求必須使用 gradle 1.x 的版本,等到 AS 2.0 的時候,Google 不支援 gradle1.x 的版本,這個時候你必須手動更新下 android gradle plugin 的版本,然後重新同步下。    

檢查以上兩個地方基本就可以匯入並運行了,如果還有其他問題,那可能就是環境或者專案本身的問題了。    

8  認識下幾個命令            

上面提到了,假設我們沒有 IDE ,只有類似 Sublime、Atom、Vim這種輕量編輯器怎麼辦?那我們就沒法開發 Android 了麼?然而只要有構建工具,不需要 IDE 我們一樣有辦法開發,這個時候我們就需要用到幾個有用的 Gradle 命令了:    

./gradlew -v 版本號    

./gradlew clean 清除9GAG/app目錄下的build資料夾    

./gradlew build 檢查依賴並編譯打包    

這裡注意的是 ./gradlew build 命令把 debug、release 環境的包都打出來,如果正式釋出只需要打 Release 的包,該怎麼辦呢,下面介紹一個很有用的命令 assemble, 如    

./gradlew assembleDebug 編譯並打Debug包    

./gradlew assembleRelease 編譯並打Release的包    

值得注意的是,以上所有命令都是在終端裡執行,並且必須要切換到所在專案的根目錄下執行,win系統直接執行 gradlew 。    

 Gradle 相關的檔案            

我們在 Android Stduio 上新建一個全新的 Android 專案,姑且取個名字叫 demo ,一般就包含了三個相關的 gradle 配置檔案,分別是根目錄下的 build.gradle、settings.gradle 和 app 目錄下的 build.gradle 檔案,前兩個檔案配置比較簡單,上篇文章也已經有所介紹,今天來主要介紹下 app/build.gradle 檔案的詳細配置。    

2  app/build.gradle 配置檔案            

一般來說,新建的一個專案,在 app 目錄會生成一個 build.gradle 檔案,app 目錄基本是專案的一個主要目錄了,所有的功能開發都是在這個目錄下,自然該目錄下的 build.gradle 也是整個專案最重要的配置檔案,這個檔案對全新的專案來說會包含三部分    

  • 最頂部的 apply plugin 宣告

  • android {} 節點

  • dependencies {} 節點

apply plugin 宣告    

最頂部有一行程式碼是這樣的:

apply plugin: 'com.android.application'    

代表該專案是一個 Android 專案,而且一個 Android 專案只有一句這個宣告,別問為什麼這樣寫,這是規範。    

如果你的專案有引用一些 module ,你可以理解成通過原始碼的方式引用一些 android library ,那麼你的 module 開頭需要宣告是一個 android library ,那需要這樣寫:   

apply plugin: 'com.android.library'    

是不是很容易理解?    

dependencies 節點    

我們先來看下 dependencies 節點,dependencies 是 denpendency 的複數,意為依賴的意思,所以這裡就是用來管理依賴的地方。這裡以我的開源專案 9GAG 為例,依賴一般有三種:    


   

我們知道我們可以在 AS 中直接依賴 jar 檔案,靠的就是這行程式碼 compile fileTree(dir: 'libs', include: ['*.jar']) ,意思是編譯 libs 目錄下的所有 jar 包,當然你可以更改這個目錄。    

第二種就比較常見了,現在大家都已經很熟悉了,就是直接依賴遠端專案名字 + 版本號,至於該專案是放在哪裡的呢?一般是放在 jcenter 和 maven 倉庫的,這個可以在專案根目錄下的 build.gradle 指定遠端倉庫地址,甚至可以在本地搭建一個私有倉庫,然後指定本地倉庫地址。    

第三種就是類似原始的引用 android library 的方式,一般是你們公司內部的專案,或者改第三方庫的原始碼,同時本地又沒有搭建私有倉庫,才會選擇這種方式。這種方式目前很不推薦了,大部分情況第二種方式完全足夠了,但是大家知道這也是一種依賴方式。    

android 節點    

以上兩個節點都相對簡單點,這個節點是跟專案配置緊密相關的,簡單有簡單的配置方法,複雜也有複雜的配置方法,這裡我先列舉一些專案常用的配置,並且加上了註釋方便大家理解:    



   

這部分應該比較簡單,沒有不理解的吧?就不過多解釋了。    


   

buildTypes 意為編譯型別,這裡聲明瞭 debug 和 release 兩種型別,當然你也可以宣告其他型別,名字隨意取,可以看到 debug 和 release 兩種型別簽名所用的配置不一樣,這個配置具體詳細也就是在上部分 signingConfigs 節點指定的,那裡面的一些密碼資訊是在你生成 keystore 檔案時設定的。    

這裡配置完成之後就可以通過上篇文章提到的的命令 gradlew assembleDebug 或者 gradlew assembleRelease 進行打包了,這裡估計有同學會問這個命令跟 buildTypes 有沒有什麼關係呢?聰明,是有關係的,這裡用到的其實就是 assemble 命令,而 assemble + buildTypes 會生成一個 task ,所以 gradlew assembleDebug 和 gradlew assembleRelease 都是屬於拼接的一個 task ,如果你 buildTypes 定義了一個 abc 的型別,那你就會有一個 gradlew assembleAbc 的 task 可以執行。    

但是關於 task 遠不止與此,這裡先提一下,後面再給大家單獨介紹。    

3  從 Eclipse 遷移到 AS            

上面的一些命令差多介紹完了一些專案的基本配置,大家基本也都明白各個配置的意思了,相信大家大部分也都在用 AS 了,但是不排除仍有部分讀者還在用著 Eclipse ,或者正準備從 Eclipse 遷移到 AS 上,從 Eclipse 遷移到 AS 上應該會遇到不少問題,但是我認為一個最大的問題就是 gradle 指令碼的生成,Eclipse 支援直接匯出 AS 專案,就給我們生成了 gradle 指令碼,當然如果你對 gradle 熟悉的話完全可以自己新建 gradle 檔案,然後自己把一些 gradle 配置手動寫上去。    

還有一個最大的問題是目錄結構,我們知道 Eclipse 上的目錄結構是:    

demo    

        |-- app    

                 |--libs    

                 |--src    

                 |--res    

而 AS 上的專案結構是:    

demo    

       |--libs    

       |--src    

               |--main    

相關推薦

Android關於gradled理解以及如何簽名打包

目錄: 1、gradle的概念 2、gradle配置jar包,和libs資料夾匯入jar包的區別 3、簽名打包:     (1)Studio     (2)命令列     (3)gradle wrapper的原理 4、BuildConfig的使用 5、

Android的Handler、LooperMessageQueue的使用以及原理

       提到Handler大家一定都不陌生,通常我們都是在子執行緒通過在主執行緒中建立的Handler物件切換到主執行緒中去更新View的顯示內容,然而很少接觸Looper更沒有感覺到MessageQueue的存在,然而三者是密切相關的,那麼接下來分別介

android ril 層除錯筆記理解

 這段時間一直在弄android5.0 , 對 SELinux有了一定的瞭解,  上週是在折騰 4G 模組, 搞 ril  層的東西. 以前沒有好好理解 ril 層是怎樣工作的, 以前在網上看關於 ril 的文章, 感覺看不懂, 後來忙其它方面的東西, 沒有深入瞭解 ri

匯編括號[]作用以及leamov指令的區別

article truct err csdn 指針 valid tail 支持 art 現在總結一下:其中牽扯到lea指令,mov指令,[] 一.lea指令:對於寄存器來說:第二個操作數是寄存器必須要加[],不然報錯,這裏lea就是取[寄存器]的值,如:mov eax,2

轉自老羅 Android應用程式資源的編譯打包過程分析

原文地址   http://blog.csdn.net/luoshengyang/article/details/8744683 轉載自老羅,轉載請說明   我們知道,在一個APK檔案中,除了有程式碼檔案之外,還有很多資原始檔。這些資原始檔是通過An

Android的dispatchTouchEvent()、onInterceptTouchEvent()onTouchEvent()

Android中觸控事件傳遞過程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法。這個是困擾初學者的問題之一,我開始也是。這裡記錄一下dispatchTouchEvent()、onInter

Android Gradle的理解以及升級Gradle外掛3.0.1遇到的坑

Gradle簡介 開始填坑之前,先簡單聊聊gradle,Gradle其實就是一個構建專案的工具,也就是把那一個個檔案、資料夾按照一定的規則關聯起來,形成一個專案的工具,它其實不僅僅是用在AndroidStudio上。 我們在AS中用到的Gradle其實應該被叫做 Andr

Android外掛開發篇總結概述

                剛剛終於寫完了外掛開發的最後一篇文章,下面就來總結一下,關於Android中外掛篇從去年的11月份就開始規劃了,主要從三個方面去解讀Android中外掛開發原理。說白了,外掛開發的原理就是:動態載入技術。但是我們在開發外掛的過程中可能會遇到很多問題,所以這裡就分為三篇文章進行解

Android的軟引用(SoftRefrerence)弱引用(WeakReference)

在Android開發中,基本上很少有用到軟引用或弱引用,這兩個東東若用的很好,對自己開發的程式碼質量的提高有很大的幫助。若用的不好,會坑了自己。所以,在還沒有真正的去了解它們之前,還是慎用比較好。 下面將通過兩個Demo來結識軟引用和弱引用在開發中的運用。

AndroidDev Tools的安裝使用

原文地址:http://blog.micro-studios.com/?p=790 SDK自帶的系統映象中,預設安裝了Dev Tools;因此,你可以在Androi模擬器上使用它。 使用Dev Tools,你可以開啟裝置上的很多設定,這讓測試和除錯應用程式變得更容易了。 如

Android控制元件的paddingmargin屬性的使用

Android中的padding和margin是佈局中比較常用的兩個屬性,主要是用來設定邊距的。 margin:如果給某個控制元件B設定了margin屬性,那實際上就是設定了控制元件B距離他的父控制元

AndroidallowBackup屬性的含義危險性例項講解

https://blog.csdn.net/qq_31387043/article/details/51452782 一、前言 今天在開發的過程中遇到一個問題,就是關於AndroidManifest.xml中的allowBackup屬性,

Android測量Text的寬度高度

Android中,在自定義View中通過Canvas繪製文字時,經常需要測量文字的寬度和高度。這裡記錄下幾種比較常

Android同時使用unit testinstrument test作為單元測試

轉載:http://www.jianshu.com/p/4b03123b4f81 前言 作為開發人員,我們需要編寫必要的單元測試以驗證程式的穩定性,而且單元測試也可以用來驗證重構的結果。 Android官方現在提供了兩種測試途徑Android Unit Test

Android 對apk進行重簽名檢視簽名(window mac)及生成簽名

生成簽名檔案:其實是有很多工具可以做到,這裡不過是想用命令來生成 其命令如下:生成的簽名預設在c盤根目錄下 keytool -genkey -alias aaaa.keystore -keyalg RSA -validity 2000 -keystore new

android獲取package的versionCodeversionName

//獲取當前軟體的版本getPackageInfo("系統中其他已經案子的軟體包名", PackageManager.GET_CONFIGURATIONS); //獲取系統日曆的版本資訊 packageInfo = getPackageManager().getPackag

圖片理解數字簽名驗簽過程

數字簽名是什麼? 1. 鮑勃(伺服器)有兩把鑰匙,一把是公鑰,另一把是私鑰。 2. 鮑勃把公鑰送給他的朋友們----帕蒂(客戶端1)、道格(客戶端2)、蘇珊(客戶端3)----每人一把。 3. 蘇珊(客戶端3)給鮑勃(伺服器)寫信,寫完後用鮑勃的公

清理Android無用的drawable資源values資源

對於Android專案來說,專案需求改的多了、UI變化多了可能會導致很多無用的圖片資源或者values資源,這些無用的資源導致最終的apk檔案增大。腫麼辦?當然是刪除了。。。怎麼刪除?難道一個一個尋找

AndroidSpanner獲取選中內容選中位置,根據位置選擇物件

作為一名菜鳥,關於spanner獲取選中的內容文字程式碼,網上後很多 但是根據給出的位置來自動選擇物件,這個程式碼一直沒找到 後來找人問了問,才知道就一句話的事,特意在這裡記錄下 array.xml

Android的 單選按鈕複選框

在Adnroid中,單選按鈕和複選框都繼承了普通按鈕。因此它們都可以使用普通按鈕支援的各種屬性和方法。不同的是,它們提供了可以選中的功能,下面是對單選按鈕的和複選框的進行詳細的介紹。 在Andro