Android學習系列(42)--Android Studio實戰技巧


使用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是隨機生成的標識碼,各人可能不一樣。

  • 效果圖。
    1

  • 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的強大!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM