zoukankan      html  css  js  c++  java
  • 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的强大!

  • 相关阅读:
    HTML实体符号代码速查表
    在vue中使用css预编辑器
    多个SVG图形集成到一个SVG图形上
    CSS3那些不为人知的高级属性
    如何搭建一个vue项目(完整步骤)
    Vue.js——vue-resource全攻略
    this.$router.push、replace、go的区别
    Vue界面中关于APP端回调方法问题
    Vue、webpack中默认的config.js、index.js 配置详情
    vue mint ui 手册文档
  • 原文地址:https://www.cnblogs.com/qianxudetianxia/p/3987395.html
Copyright © 2011-2022 走看看