使用android studio開發(fā)項(xiàng)目的一些問題,功能和技巧。
1. 環(huán)境
Mac OSX 10.9.5 + Android Studio 0.8.9
2. gradle項(xiàng)目加載超慢
這是因?yàn)間radle官方下載地址特別慢導(dǎo)致,解決方案有2個(gè):
第二種方案,具體以Mac為例子,Android Studio 0.8.9默認(rèn)使用的gradle版本還是gradle-1.12。
-
下載gradle-1.12-all.zip,放到~/.gradle/wrapper/dists/gradle-1.12-all/2apkk7d25miauqf1pdjp1bm0uo,這個(gè)2apkk7d25miauqf1pdjp1bm0uo是隨機(jī)生成的標(biāo)識碼,各人可能不一樣。
-
效果圖。

-
gradle-1.12-all.zip我上傳了一個(gè)到百度云盤。
下載gradle-1.12-all.zip
-
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. 默認(rèn)編譯的應(yīng)用版本選擇
當(dāng)你點(diǎn)擊那個(gè)右三角運(yùn)行按鈕的時(shí)候,它默認(rèn)是會運(yùn)行debug版本,其實(shí)這里可以調(diào)整為默認(rèn)編譯release版本,當(dāng)然這點(diǎn)上可能對你不是很重要。
但是當(dāng)你定義了各種版本,并且想?yún)^(qū)別開發(fā),這就很有用了。
在左下角 - Build Variants - 選擇默認(rèn)版本。

5. 顯示行號
Setings - Editor - Appearance - 勾選Show line numbers
6. 快捷鍵
這個(gè)網(wǎng)上有很多資料,而且在設(shè)置里面可以選擇自己習(xí)慣的Keymap,比如eclipse,這里點(diǎn)到為止。
列舉幾個(gè)參考鏈接:
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由之前的黑白變的有高亮效果了,還有其他功能,在插件介紹中都有詳細(xì)說明。
關(guān)于一些好的插件的推薦,可以單開一篇博客了,在此不贅述。
8. 多版本編譯
原理
采用動態(tài)替換渠道字符串的方式,生成各渠道的AndroidManifest.xml文件并打包。
說明:參考自友盟umeng-muti-channel-build-tool/Gradle,并實(shí)際項(xiàng)目驗(yàn)證OK。
關(guān)鍵代碼
//替換AndroidManifest.xml的REPLACE_KEY字符串為渠道名稱 android.applicationVariants.all{ variant -> variant.processManifest.doLast{ //v1.11之前這里用的copy{},我換成了文件操作,這樣可以在v1.11版本正常運(yùn)行,并保持文件夾整潔 //${buildDir}是指build文件夾 //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,運(yùn)行時(shí)會自動生成 //下面的路徑是類似這樣: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文件指定為我們修改過的這個(gè)文件 variant.processResources.manifestFile = file("${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml") } }
具體步驟
- AndroidManifest.xml中添加渠道m(xù)eta
<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>
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版本正常運(yùn)行,并保持文件夾整潔 //${buildDir}是指build文件夾 //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,運(yùn)行時(shí)會自動生成 //下面的路徑是類似這樣: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文件指定為我們修改過的這個(gè)文件 variant.processResources.manifestFile = file("${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml") } }
9. 小結(jié)
Android Studio作為新的開發(fā)工具,需要不斷的探索才能更好的使用,才能發(fā)揮出它遠(yuǎn)勝eclipse的強(qiáng)大!