我一直android開發以來使用的都是eclipse開發的,在android studio剛出來的時候,嚐鮮了一下,發現並沒有想象中的好用,而且一些開發習慣很難改過來,所以就又繼續用eclipse了,直到最近,發現github上很多開源項目都是用的gradle開發的,我纔想起了android studio,經過一週的練習使用,從下載安裝到現在的APP簽名發佈,基本算是流程走了一遍,雖然關於gadle的配置還有很多不瞭解的地方,但是總算對之也有了一些全面的認識,特此把其中遇到的問題記錄下來。
- 新建項目或者導入項目的時候會遇到提示android studio building gradle project info,一直卡在這裏很久,這是因爲studio需要下載gradle,這個比較耽誤時間,我不曉得它選擇的從哪下的,但是很慢。解決方法:到電腦的C:\Users\Administrator\.gradle\wrapper\dists目下會看到studio下載的版本,點一個進去,看下studio下載的哪個版本,然後到gradle官網下載當前版本的gradle,放到文件夾下就OK。如下圖:
- 快捷鍵習慣問題,在eclipse轉到android studio的時候,快捷鍵很不順手,影響開發進度,很簡單,打開studio, File->settings->keymap如下圖設置:
選中eclipse後,我們就可以使用像eclipse一樣的快捷鍵了 -
項目配置問題,使用android studio,我們不需要再AndroidMainfest.xml裏配置SDK版本,只用在build.gradle裏配置就ok。以下算是一個簡略的模板,僅供參考:
apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 16 versionName "1.6" } signingConfigs { release { storeFile file("jclick") storePassword "xxxx" keyAlias "xxxx" keyPassword "xxx" } } buildTypes { release { runProguard true proguardFiles 'proguard-rules.txt' signingConfig signingConfigs.release } debug{ runProguard false proguardFiles 'proguard-rules.txt' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' }
以上配置支持我們在打包時候使用proguard進行代碼混淆以及簽名。jclick爲我的keystore文件,proguard-rules.txt是我的代碼混淆文件,它們都位於module的根目錄下。打包發佈的前提是安裝gradle,具體安裝方法爲官網下載gradle然後把bin目錄配置到環境變量path裏,然後cmd執行gradle -v看是否配置成功,然後到cmd到module的根目錄下,執行:gradle assembleRelease命令,就會在module的build目錄下生成一堆文件,我們可以在apk文件夾裏找到apk文件。另外一種打包方法:菜單Build->Generate Signed APK->選擇打包的module->配置keystore信息->OK,這種打包方式我發現一個問題,就是它不會進行proguard代碼混淆,直到現在也不清楚原因,所以我一直都是cmd進行打包。
-
引用library進行代碼混淆時候出錯,例如我在項目中用到了sherlock,它一直提示混淆失敗,XXX BuildConfig,起初我一直不清楚什麼原因,後來才發現是因爲*.aar沒有BuildConfig,所以在使用sherlock的時候,我的progurad文件裏是這麼配置的:
-dontwarn com.actionbarsherlock.** -keep class android.support.v4.app.** { *; } -keep class android.support.v4.view.** { *; } -keep interface android.support.v4.app.** { *; } -keep public class * extends android.support.v4.** -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; }
以上問題是讓我糾結時間比較久的問題,特分享出來