首页 > 代码库 > Android Studio问题记录

Android Studio问题记录

开始整理使用android studio开发android项目

gradle的好处详及细介绍就不说了,网上搜下就好

使用gradle构建项目


安装studio,版本0.8.14
gradle 目前支持插件版本gradle-2.1-all


本地安装gradle-2.1-all,下载包,配置环境变量,路径到bin目录
(记得翻墙)
android studio 快捷键 Alt+Enter引入类import


studio新建项目
studio的Project相当于eclipse的workspace,Module相当于Eclipse的project


studio新建一个Project就会新打开一个studio程序

项目目录如下:

1:根目录的gradle文件

2:主项目的gradle文件

3:library项目的gradle文件

4:编译后生成的文件存放处


主项目目录


新建项目之后,点击Studio左下角Terminal,弹出命令行(终端)运行构建命令,记得命令行路径是在根目录下,我刚开始的时候是进到了主项目运行gradle命令,所以遇到 

gradle常用命令有:


gradle --help
gradle tasks  //列出task列表
gradle asD (gradle assembleDebug) //编译debug打包
gradle asR (gradle assembleRelease) //编译release打包
gradle asD --refresh-dependencies  //强制刷新依赖
gradle asD --parallel //并行编译
gradle asD --parallel-threads 3
gradle build gradle clean

直接执行gradle build会生成debug 包和release包 如果不想要debug包可以使用gradle asR命令

gradle基本使用方法可以查看相关文档,不再详细说明

以下是我在研究的时候查找到的文档,或许有用,以备

http://beartung.github.io/rockwithandroid/gradle.html

http://www.cnblogs.com/qianxudetianxia/p/3987395.html

http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html

https://gist.github.com/youxiachai/5608223

https://github.com/ShinChven/ImmigrateToGradle

http://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/introduction/README.html

下面是我用的gradle 的配置信息,是在主项目下的,即是上面的2处

另外,1处的配置项目里默认即可,因为有些library项目默认的maven( 默认是这个  jcenter())仓库没找到所以我加了一个 
        mavenCentral()

apply plugin: ‘com.android.application‘

android {
    compileSdkVersion 21
    buildToolsVersion "21.0.1"

    defaultConfig {
        applicationId "com.jiangjinyue.pangdan"
        minSdkVersion 8
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }

    signingConfigs {
        myConfig{
            storeFile file("pangdan.keystore")
            storePassword "123456"
            keyAlias "pangdan"
            keyPassword "123456"
        }
    }
    buildTypes {
        release {
            signingConfig  signingConfigs.myConfig
            runProguard false
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
        debug{。。。。}//测试包
    }

    //渠道Flavors,我这里写了一些常用的,你们自己改
    productFlavors {
        GooglePlay{}
        Store360{}
//        QQ{}
//        Taobao{}
//        WanDouJia{}
//        AnZhuo{}
//        AnZhi{}
//        BaiDu{}
//        Store163{}
//        GFeng{}
//        AppChina{}
//        EoeMarket{}
//        Store91{}
//        NDuo{}
    }
    packagingOptions { // 打包配置
        exclude ‘META-INF/LICENSE‘ // 排除一些文件
        exclude ‘META-INF/NOTICE‘
        exclude ‘META-INF/LICENSE.txt‘
        exclude ‘META-INF/NOTICE.txt‘
    }
    //这个是解决lint报错的代码
    lintOptions {
        abortOnError false
    }

    sourceSets {
        main {//引用libs目录下的so文件,JNI  jniLibs.srcDirs = [‘libs‘]
        }
    }
}

android.applicationVariants.all{ variant ->
    //https://gist.github.com/goldierox/9533466                                                      //这里是修改AndroidManifest.xml文件中minSdkVersion                                                variant.processManifest.doFirst {
        File manifestFile = file("${buildDir}/intermediates/exploded-aar/com.github.amlcurran.showcaseview/library/5.0.0/AndroidManifest.xml")
        if (manifestFile.exists()) {
            //println("Replacing minSdkVersion in Android Maps Utils")
            String content = manifestFile.getText(‘UTF-8‘)
            content = content.replaceAll(/minSdkVersion="11"/, ‘minSdkVersion=\"8\"‘)
            manifestFile.write(content, ‘UTF-8‘)
//            println(content)
        }
        File manifestFileN = file("${buildDir}/intermediates/exploded-aar/com.github.sd6352051.niftydialogeffects/niftydialogeffects/1.0.0/AndroidManifest.xml")
        if (manifestFileN.exists()) {
//            println("Replacing minSdkVersion in Android Maps Utils")
            String content = manifestFileN.getText(‘UTF-8‘)
            content = content.replaceAll(/minSdkVersion="10"/, ‘minSdkVersion=\"8\"‘)
            manifestFileN.write(content, ‘UTF-8‘)
//            println(content)
        }
    }

    variant.processManifest.doLast{
        //这里是多渠道打包修改AndroidManifest.xml文件里面的渠道值,以友盟为例                                     <meta-data
            android:name="UMENG_CHANNEL"
            android:value="http://www.mamicode.com/UMENG_CHANNEL_VALUE" />
        //关于路径我这里build目录下的intermediates 
        //之前这里用的copy{},我换成了文件操作,这样可以在v1.11版本正常运行,并保持文件夹整洁
        //${buildDir}是指./build文件夹
        //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
        //下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
       def manifestFile = "${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml"

        //将字符串default替换成flavor的名字
        def updatedContent = new File(manifestFile).getText(‘UTF-8‘).replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")
        new File(manifestFile).write(updatedContent, ‘UTF-8‘)

        //将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
        variant.processResources.manifestFile = file("${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml")
    }
}

dependencies {                                                                                   //这里是引用的library以及libs下的jar包,另外使用appcompat-v7的时候默认添加的是21版本的,但是我这里有些style文件找不到,修改成18就好了,查了下,似乎是新本不兼容了,还需要研究 
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    compile ‘com.android.support:support-v4:+‘
    compile ‘com.nineoldandroids:library:2.4.0‘
    compile ‘com.github.machinarius:preferencefragment:0.1.1‘
    compile ‘com.github.sd6352051.niftydialogeffects:niftydialogeffects:1.0.0@aar‘
    compile ‘com.github.amlcurran.showcaseview:library:5.0.0‘
    compile project(‘:libraries:social_sdk_library_project‘)
    compile ‘com.android.support:appcompat-v7:18.0+‘
}





Android Studio问题记录