使用android studio開發專案的一些問題,功能和技巧。
1. 環境
Mac OSX 10.9.5 + Android Studio 0.8.9
2. gradle專案載入超慢
這是因為gradle官方下載地址特別慢導致,解決方案有2個:
VPN,乾淨利索。
[推薦VPN](http://a.wy002.com/34750)
拷貝一個gradle的已下載的壓縮包到gradle目錄的wrapper路徑下,然後關閉Android Studio在開啟,它會自動識別並解壓好。
第二種方案,具體以Mac為例子,Android Studio 0.8.9預設使用的gradle版本還是gradle-1.12。
下載gradle-1.12-all.zip,放到~/.gradle/wrapper/dists/gradle-1.12-all/2apkk7d25miauqf1pdjp1bm0uo,這個2apkk7d25miauqf1pdjp1bm0uo是隨機生成的標識碼,各人可能不一樣。
效果圖。
gradle-1.12-all.zip我上傳了一個到百度雲盤。
[下載gradle-1.12-all.zip](http://pan.baidu.com/s/1i3zeQUh)
linux的gradle的目錄和mac上一樣,Windows是在你的使用者目錄下。
3. Android Studio新增引用第三方Library
右鍵Module - Open Module Settings - Dependencies, 找到"+"按鈕,選擇Library dependency,彈出對話方塊,
選中support-annotations,
它會在Module下的build.gradle中的dependencies新增一行:
compile 'com.android.support:support-annotations:20.0.0'
4. 預設編譯的應用版本選擇
當你點選那個右三角執行按鈕的時候,它預設是會執行debug版本,其實這裡可以調整為預設編譯release版本,當然這點上可能對你不是很重要。
但是當你定義了各種版本,並且想區別開發,這就很有用了。
在左下角 - Build Variants - 選擇預設版本。
5. 顯示行號
Setings - Editor - Appearance - 勾選Show line numbers
6. 快捷鍵
這個網上有很多資料,而且在設定裡面可以選擇自己習慣的Keymap,比如eclipse,這裡點到為止。
列舉幾個參考連結:
http://www.developerphil.com/android-studio-tips-of-the-day-roundup-1/
http://www.developerphil.com/android-studio-tips-of-the-day-roundup-2/
7. 外掛
Settings - Plugins - Browser repositories - 彈出對話方塊 - 選中某一外掛 - 右邊Install plugin。
比如,安裝.gigignore support,提示需要重啟,重啟後檢視.gitigore由之前的黑白變的有高亮效果了,還有其他功能,在外掛介紹中都有詳細說明。
關於一些好的外掛的推薦,可以單開一篇部落格了,在此不贅述。
8. 多版本編譯
原理
採用動態替換渠道字串的方式,生成各渠道的AndroidManifest.xml檔案並打包。
說明:參考自友盟umeng-muti-channel-build-tool/Gradle,並實際專案驗證OK。
關鍵程式碼
//替換AndroidManifest.xml的REPLACE_KEY字串為渠道名稱
android.applicationVariants.all{ variant ->
variant.processManifest.doLast{
//v1.11之前這裡用的copy{},我換成了檔案操作,這樣可以在v1.11版本正常執行,並保持資料夾整潔
//${buildDir}是指build資料夾
//${variant.dirName}是flavor/buildtype,例如GooglePlay/release,執行時會自動生成
//下面的路徑是類似這樣:build/intermediates/manifests/GooglePlay/release/AndroidManifest.xml
def manifestFile = "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml"
//將字串REPLACE_KEY替換成flavor的名字
def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll("REPLACE_KEY", "${variant.productFlavors[0].name}")
new File(manifestFile).write(updatedContent, 'UTF-8')
//將此次flavor的AndroidManifest.xml檔案指定為我們修改過的這個檔案
variant.processResources.manifestFile = file("${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml")
}
}
具體步驟
- AndroidManifest.xml中新增渠道meta
<application
android:label="@string/app_name">
<meta-data android:name="APP_PID" android:value="default" />
<activity
android:name="com.jayfeng.xxx"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
- 完整的build.gradle
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.1'
defaultConfig {
applicationId 'com.jayfeng.app.test'
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName 'V1.0'
}
signingConfigs {
myConfig {
storeFile file("xxxxxx.keystore")
storePassword "xxxxxxx"
keyAlias "xxxxx"
keyPassword "xxxxxx"
}
}
buildTypes {
release {
signingConfig signingConfigs.myConfig
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
"default" {}
google {}
"91" {}
hiapk {}
gfan {}
goapk {}
appChina {}
mumayi {}
eoe {}
nduo {}
feiliu {}
crossmo {}
huawei {}
QQ {}
"3G" {}
"360" {}
baidu {}
sohu {}
"163" {}
UC {}
dangle {}
samsung {}
mmw {}
xiaomi {}
lenovo {}
nearme {}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':mblog')
}
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
//替換AndroidManifest.xml的default字串為渠道名稱
android.applicationVariants.all{ variant ->
variant.processManifest.doLast{
//之前這裡用的copy{},我換成了檔案操作,這樣可以在v1.11版本正常執行,並保持資料夾整潔
//${buildDir}是指build資料夾
//${variant.dirName}是flavor/buildtype,例如GooglePlay/release,執行時會自動生成
//下面的路徑是類似這樣:build/manifests/GooglePlay/release/AndroidManifest.xml
def manifestFile = "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml"
//將字串default替換成flavor的名字
def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll("default", "${variant.productFlavors[0].name}")
new File(manifestFile).write(updatedContent, 'UTF-8')
//將此次flavor的AndroidManifest.xml檔案指定為我們修改過的這個檔案
variant.processResources.manifestFile = file("${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml")
}
}
9. 小結
Android Studio作為新的開發工具,需要不斷的探索才能更好的使用,才能發揮出它遠勝eclipse的強大!