Android学习系列(42)--Android Studio实战技巧

使用android studio开发项目的一些问题,功能和技巧。

1. 环境

Mac OSX 10.9.5 + Android Studio 0.8.9

2. gradle项目加载超慢

这是因为gradle官方下载地址特别慢导致,解决方案有2个:

  • VPN,干净利索。

    推荐VPN

  • 拷贝一个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

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

posted @ 2014-09-23 10:18 谦虚的天下 阅读(...) 评论(...) 编辑 收藏