迁移到Android Studio

上星期决定将Android的开发环境迁移到Android Studio。 契机是同样体验Android L预览版的SDK,Eclipse + ADT 相比 Android Studio + gradle ,前者相关的更新实在太慢了,估计以后也不会好了…… 这篇主要记录一下迁移到Android Studio(v0.8.1)环境,主要的设置等。

首先设置Android Studio的HTTP Proxy,貌似Android Studio不会走系统代理,没有代理的话,国内根本跑不起来。

接下来设置keymap(这个需要长期摸索)、设置Code Style(可以用 Square厂的样式)、Sdk Manager更新等。

Android Studio会自带的SDK在 /Applications/Android Studio.app/sdk 目录下,可以重新指定SDK路径。如果以前在环境变量里配置过SDK路径,记得保持一致。要用命令行编译打包,需要从gradle官网下载gradle安装待用。

最新版的Android Studio导入Eclipse的工程,已经很完善了。 会自动生成好build.gradle。 关于gradle编译工程具体参看官网和网上大堆资料。

用了gradle编译最大的好处我觉得是debug可以方便的自定义签名!微信和微博的SDK调用时都会检查应用的签名,debug版签名不一致是无法调用的。以前Eclipse自定义keystore会对所有工程都生效……开发特别麻烦。现在都解决啦~

结合build.gradle代码,说明一下相关批量打包等相关配置。 使用gradle v0.12版,批量打包代码参考友盟渠道打包工具

apply plugin: 'android'

dependencies {  
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:19.1.+'
    compile 'com.android.support:appcompat-v7:19.1.+'
}

android {  
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        applicationId "me.relex.demo"
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 10
        versionName "1.0"
    }

    //////////////defaultConfig说明///////////////
    //
    // defaultConfig里的相关设置,会在编译的过程中
    // 生成或者修改AndroidManifest.xml里的相关设置
    //  
    // android:versionCode="10"
    // android:versionName="1.0"
    //  
    // android:minSdkVersion="8"
    // android:targetSdkVersion="19"
    // 
    // 所以AndroidManifest.xml中没有必要再存在这种设置了
    //
    //////////////////////////////////////////////


    ////////////////sourceSets说明/////////////////
    //
    // 用新版的gradle没有必要配置sourceSets
    // 
    // jni编译的.so库放到jniLibs文件夹内
    // renderScript文件会放到rs文件夹内
    // 就可以自动编译进去了
    //
    //////////////////////////////////////////////

    // 忽略编译 lint 报错,必须加上。
    lintOptions {
        abortOnError false
    }

    // 渠道名称
    productFlavors {
        "1" {
            // 必要的话可以在里面重写前面defaultConfig的值
            // 比如版本号,包名等
        }
        "2" {}
        "3" {}
    }

    //配置keystore签名
    signingConfigs {  
        release {
            storeFile file("../android.keystore")
            storePassword "XXXXXX"
            keyAlias "XXXXXX"
            keyPassword "XXXXXX"
        }
    }

    buildTypes {


        debug {  // 对于开发的debug版,使用之前配置的正式签名
            signingConfig signingConfigs.release
        }

        release {
            signingConfig signingConfigs.release

            // 配置自定义proguard路径
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard-project.txt'

            // 编译自定义配置
            applicationVariants.all { variant ->
                //if (variant.buildType.name == "release") { // 也可以放到buildTypes外面,加上这句判断区分版本
                variant.processManifest.doLast {
                    // 新版编译的文件会放到build目录的intermediates文件夹内。

                    /*---- 修改渠道号 ----*/
                    def manifestFilePath = "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml"
                    def updatedContent = new File(manifestFilePath).getText('UTF-8').
                            replaceAll("CHANNEL_VALUE", "${variant.productFlavors[0].name}")
                    new File(manifestFilePath).write(updatedContent, 'UTF-8')
                    def manifestFile = file(
                            "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml")
                    variant.processResources.manifestFile = manifestFile

                    /*---- 修改输出apk文件名 ----*/
                    def versionName = android.defaultConfig.versionName
                    def versionCode = android.defaultConfig.versionCode
                    def apkName = android.defaultConfig.applicationId
                    apkName += "-" + String.valueOf(versionCode)
                    apkName += "-${variant.baseName}.apk"
                    variant.outputFile =
                            file("${buildDir}/release_" + versionName + "/" + apkName)
                }
                //}
            }
        }
    }
}

用命令行编译也很简单。 build.gradle配置好后,在工程目录下,输入下面命令,即可生成Release版本

gradle clean //先清理一下。

gradle assembleRelease  

Author

Relex

Android Developer