Android工程常用配置和開發技巧
Android工程經常需要做一些基本設定,如混淆、多版本、申請許可權等,在這裡做一下彙總,以便查閱。
目錄
- Android Studio中直接執行Java的main函式
- Android Studio的快捷程式碼(如psvm)
- Activity樣式
- MultiDex
- 混淆配置
- AIDL介面
- 打包APK自動改名
- 請求許可權
- 資料庫
- 多版本及開發測試
- 在debug時使用正式簽名
- 一些好用的外掛
- 清理空間
- 自定義屬性
- 一些有趣的小問題
Android Studio中直接執行Java的main函式
很多時候,我們只想驗證某些純Java的API,或驗證某些語言特性,在Android端執行這種程式碼需要經歷漫長的編譯-安裝-執行的過程,太慢,繁瑣,我們可以在AndroidStudio中直接執行純Java的main函式(不能含有Android的API),有兩種方法可以做到。
1.在Android工程中即可執行
可以直接執行一個有main函式的Java檔案。
其實只要新建一個Java檔案,然後遮蔽頂部的package即可:
注意只能處理純Java類,雖然可以呼叫Android的各種類如Activity,但是執行時會報錯,因為缺少各種環境。
另外,這種用法有個缺陷:有點慢,會走gradle編譯(permission:assemble debug),不過比編譯App要好多了。
2.在Java Library中執行
這種做法稍微複雜,但可以執行一整個Module模組。
具體需要先新建一個Java libaray的Module。
選擇Java Library
設定Module的執行方式
新增Application
然後配置執行方式去執行這個Module
配置時注意兩點:
1.選好Main class,一直選到class檔案
2.在Use classpath of module中,選擇lib
最後就可以像執行App那樣去執行它了
執行即可
這種執行方式速度較快,而且是以Module為單位執行的,可以實現一些複雜的邏輯。
參考:android studio編寫執行java main的三種方法(親測)
Android Studio的快捷程式碼(如psvm)
Android Studio脫胎於IntelliJ IDEA,後者支援通過特定字母組合打出特定程式碼段,大大加快我們寫Bug(誤)的速度,例如:
psvm可以輔助打出main函式:
sout可以輔助打出print函式
這些可以在setting中通過live templates配置
Activity樣式
Activity可以配置很多樣式,例如可以隱藏頂部狀態列,不顯示頂部狀態列即為全屏,有兩種設定方式:
1.在style.xml中定義一個樣式,並在manifest檔案中使用(針對整個app)。
在manifest中設定theme
2.在activity程式碼中設定屬性(僅針對單個activity)。
MultiDex
App打包的dex有函式數量上限,app越做越大,就很容易超限,需要配置為multidex,在打包時把一個dex拆分為多個,規避數量上限問題。
google官方給出了配置方式,需要在gradle中引入multidex,並讓app繼承multidexapplilcation。
在gradle中啟用multidex
如果你的Application已經繼承了其他的Applicatioin,你可以在你的Applicatioin裡override一下attachBaseContext(),呼叫MultiDex.install(this)來支援multidex。
(其實在Android裡,很多情況下都需要你extend其他Application,這就限制了我們自己對Application的擴充套件方式,如果我們想自己抽象一些Application的行為,最好是使用介面和依賴注入方式去實現,這樣耦合度低,容易擴充套件應用)
混淆
apk打包時都需要混淆,這可以防止別人根據你的apk安裝包逆向讀懂你的程式碼,注意是讀懂,他還是能讀到程式碼的,但是裡面的變數和類名都會變成a、b、c這樣毫無意義的東西。
使用混淆的配置如下:
開啟專案對應的proguard檔案
制定混淆策略,說明哪些類不混淆
AIDL
AIDL跨程式通訊是app間呼叫的手段,主要是通過引用介面和bind到serviceconnection實現的。
寫一個serviceconnection去bind目標aidl
用intent去bindservice,需要傳入aidl提供方約定的名稱
然後就可以通過serviceconnection去呼叫aidl介面中提供的函式了
打包APK自動改名
我們提交apk時,需要給apk檔案改名字,加上版本號,生成日期等,以便溝通和管理,這個工作可以在gradle裡配置一下,自動完成。
請求許可權
Android把許可權分的很細,需要什麼都需要在manifest檔案中去配置
但是Android現在對許可權管理越來越嚴格了,很多許可權不只需要manifest中配置,還需要使用者開啟app時手動確認,這需要在程式碼中動態檢查和申請許可權。
不止要申請許可權,因為使用者可能拒絕申請,所以還需要監聽,在提出申請的Activity中,覆寫指定函式,去監聽使用者的處理結果。
處理許可權申請的結果
資料庫
Android中有很多資料庫可用,例如原始的SQLite,能自動生成資料庫的GreenDao,最近很火效能不錯的Realm等。
這裡先記錄一下greendao的應用,首先在gradle中新增引用並配置生成策略,然後用註解的方式編寫資料表的類檔案,寫完後build一下工程,greendao就會自動生成資料庫相關檔案
在gradle中設定相關策略
註解編寫資料表的類檔案
編譯專案後,自動生成資料庫相關檔案
多版本及開發測試
AS支援多版本釋出,可以同時生成多個不同渠道的apk,不過速度不是很快。
關於多渠道打包,可以參考之前發的文章《Gradle多渠道打包的原理、實踐與輔助開發》
個人更喜歡用多版本來方便開發,在mock版本中模擬各種資料,測試業務場景,同時不對prod正式版造成任何影響。
配置過程如下:
(多版本還可以幫助加速除錯,你要為不同的版本配置不同的minSdkVersion,例如在開發的mock裡設定minSdkVersion=21,這樣在執行mock版本時編譯速度更快)
在build variants中,切換版本進行編輯除錯
搭好了多版本開發的基本架子,接下來就可以用多版本去輔助開發,例如,在mock開發版本中增加一個功能,即啟動時清空資料庫,同時prod正式版中沒有這個特性。
可以在所有版本中增加一個類,啟動時呼叫這個類的函式。
這個函式僅在mock版本中實現,在prod版本中,只是一個空函式,這樣既能實現mock版本的特殊功能,又不會干擾到prod版本,最重要的是,釋出前不需要改程式碼。
在debug時使用正式簽名
按照一般的工程慣例,AS在開發時使用一個臨時的apk簽名,在release時使用另一個正式的簽名,這樣可以很好地把開發和釋出區分開,也能很好地保護app產品。
但是,在實際開發過程中,經常需要在debug時會使用正式簽名,例如,聯調第三方庫,或者在已經安裝了正式版的裝置上除錯app,這時如果使用臨時apk簽名的話,簽名會被拒絕,無法除錯。
這時,我們可以通過gradle配置,在debug時使用正式簽名,具體方法如下:
注意,storefile這個引數裡指向的路徑,需要放一個正式簽名的jks檔案。
在buildTypes下,分佈為release和debug設定使用的簽名
這樣,在debug時也可以使用正式的apk簽名,可以更方便地去除錯了。
一定注意,在上線的時候要刪除掉這個簽名檔案,並且註釋掉這段話!
一些好用的外掛
1.GsonFormat 在AS上使用
可以方便地把json字串對映為對應的Java資料物件
2.JSONView 在Chrome上使用
json字串結構化顯示
3.Octotree 在Chrome上使用
在github網站上能像在IDE一樣檢視原始碼
4.Postman 在Chrome上使用
監聽和發起網路請求
5.Advertising Terminator 在Chrome上使用
遮蔽廣告
6.Click&Clean 在Chrome上使用
分類查詢和清理快取
更多外掛見:吐血推薦珍藏的 Chrome 外掛
清理空間
Android Studio長期執行下來,很容易積累起十多個G的垃圾資料,而且是在C盤,清理方法如下:
開啟C:\Users\{你的使用者}\AppData\Local\Temp
清空
實際上,C:\Users\使用者名稱\AppData裡面一般有三個資料夾,分別是Local,LocalLow,Roaming,簡單地來說,都是用來存放軟體的配置檔案和臨時檔案的,裡面有很多以軟體名稱或軟體公司命名的資料夾,理論上都可以刪除。
程式碼檢查
Android Studio提供了不錯的Analyze工具,可以從程式碼級別自動幫你排查冗餘、洩漏、SDK版本相容等問題,平時可以多執行一下Analyze->Inspect Code
自定義屬性
Android允許自定義控制元件屬性,關鍵字declare-styleable,需要增加res/mystyle.xml檔案,屬性內容如下:
formate可以允許多種型別,如 format = "reference|color",就是既允許填引用@drawable/xxx,又允許直接填顏色值#00FF00
如果某個attr是需要選擇一個資料填入的,如 android:gravity="top",還需要定義flag <flag name="oldman"value="60" />
declare-styleable中的name是為自定義控制元件的程式碼準備的,程式碼根據這個名字找到自定義屬性:
在xml檔案中引用時,需要寫一個xml的名稱空間,用來引用自定義的屬性:
然後,在下面的控制元件中,就可以根據名稱空間levideoview來配置自定義引數了。
更多內容可參考declare-styleable的使用(自定義控制元件) 以及declare-styleable中format詳解
一些有趣的小問題
·關於MAC中找不到SDK資料夾的問題
需要在Users/使用者名稱/ 這個資料夾下,右鍵,“檢視顯示選項”,勾選“顯示資源庫資料夾”,這樣就可以看到使用者目錄下的Library資料夾,SDK的路徑就在Library/Android/SDK中
檢視資原始檔夾
·MAC中使用adb的問題
Mac裝完AS後,不能直接使用adb,會報無效命令,需要步驟如下
1.開啟終端,如下命令:
yourMacBook-Pro:~ you$ echo $HOME
/Users/you
yourMacBook-Pro:~ you$ touch .bash_profile
yourMacBook-Pro:~ you$ open -e .bash_profile
開啟bash檔案
2.bash檔案預設為空,在檔案中填寫你的Android SDK的tools地址,然後儲存檔案
export PATH=${PATH}:/Users/you/Library/Android/sdk/platform-tools:/Users/you/Library/Android/sdk/tools
3.回到終端,重新整理bash
yourMacBook-Pro:~ you$ source .bash_profile
搞定,可以用adb了
·關於MAC中配置API Source的問題
預設情況下,檢視Android API部分的原始碼,只能看到函式的引數和範圍,看不到程式碼細節,需要配置API Source原始碼。
最簡單的做法是,在彈出的提示框中,選擇download:
下載API原始碼
然後關閉AS再重新開啟即可。
·關於R中的String換行問題:
1.對齊問題
我們知道,R中定義String換行,都要用\n,例如XXX\nYYY,就會把X和Y分成兩行去輸出
不過,我們會發現,為了閱讀方便,我們更習慣在string.xml中這樣定義:
XXX\n
YYY
乍看起來沒有問題,但如果你把這樣的String輸出到介面上,你會發現,這兩行
沒對齊!
第二行YYY前面多了半個空字元。
如果把\n放到第二行呢?
XXX
\nYYY
這次對齊了!實際上,你把TextView的邊框畫出來,做個對比,就會發現,手動換行產生的那個空字元,換到了XXX的末尾,只不過平時看不出來罷了
2.\n變\\n問題
前後臺互動時、用Intent傳資料時,經常會發現\n被轉義成了\\n,而且是各種環境自動轉的。
所以,在收到傳送來的\n時,先檢查一下有沒有\\n是一種什麼行為?
是一種受慣了傷害,形成條件反射的行為啊。
·編譯時在style裡應用了Theme.AppCompat.Light.DarkActionBar,出現No resource found that matches the given name的問題
因為這個主題實在appcomat v7裡引用的,如果你的app版本較低(最低相容版本),就需要顯式地引用appcompat v7,在gradle裡新增compile'com.android.support:appcompat-v7:23.4.0'
即可解決問題
相關文章
- Nginx的幾個常用配置和技巧Nginx
- android開發技巧雜談Android
- Android開發一點小技巧和建議獻上Android
- Android開發之常用佈局Android
- android studio配置ndk開發Android
- Android JNI開發系列之配置Android
- Android Studio配置開發環境Android開發環境
- Android開發應該掌握的Proguard技巧Android
- Android 開發應該掌握的 Proguard 技巧Android
- Android開發:在Eclipse中配置Android環境AndroidEclipse
- 谷歌瀏覽器開發常用8大技巧谷歌瀏覽器
- Portal開發與配置技巧集錦(一)
- Portal開發與配置技巧集錦(二)
- Portal開發與配置技巧集錦(三)
- Android Studio Gradle 常用配置詳解AndroidGradle
- Android開發:build.gradle 配置指南AndroidUIGradle
- Android Studio NDK開發-環境配置Android
- Android開發工程師(雲技術方向)--急聘Android工程師
- iOS開發常用小技巧記錄(持續更新)iOS
- Android Studio3.0 NDK配置與開發Android
- Java開發和Android開發的區別JavaAndroid
- Dubbo 學習筆記(五) 開發環境常用技巧筆記開發環境
- ArcObjects SDK開發 024開發的技術和技巧Object
- 10個Vue開發技巧助力成為更好的工程師Vue工程師
- Android小技巧:Android開發究竟該如何學習,年薪超過80萬!Android
- 常用技巧
- 10個Vue開發技巧助力成為更好的工程師(二)Vue工程師
- Flutter與已有iOS工程混合開發與指令碼配置FlutteriOS指令碼
- Docker配置容器位置和小技巧Docker
- 運用Kotlin開發Android應用的一些技巧KotlinAndroid
- [小米集團校園招聘] Android 開發工程師 (急招)Android工程師
- 【小米集團校園招聘】Android 開發工程師 (急招)Android工程師
- 中移鏈合約常用開發介紹(三)工程化開發智慧合約
- Web前端技術分享:全棧工程師常用的開發工具Web前端全棧工程師
- Laravel 5.7 最佳實踐和開發技巧分享Laravel
- 「Mybatis系列」Mybatis開發方式和配置MyBatis
- CSS 常用技巧CSS
- 【Idea】常用技巧Idea