项目目录如下:
1:根目录的gradle文件
2:主项目的gradle文件
3:library项目的gradle文件
4:编译后生成的文件存放处
主项目目录
新建项目之后,点击Studio左下角Terminal,弹出命令行(终端)运行构建命令,记得命令行路径是在根目录下,我刚开始的时候是进到了主项目运行gradle命令,所以遇到
gradle常用命令有:
gradle --helpgradle 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基本使用方法可以查看相关文档,不再详细说明
以下是我在研究的时候查找到的文档,或许有用,以备
下面是我用的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文件里面的渠道值,以友盟为例//关于路径我这里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+'}
20141114更新
新版本中对于多渠道打包做了更改,参考资料如下
AndroidManifest.xml
builde.gradle
android { productFlavors { "xiaomi"{ manifestPlaceholders = [channelName: "xiaomi"] } "360market"{ manifestPlaceholders = [channelName: "360market"] } "baidu"{ manifestPlaceholders = [channelName: "baidu"] } "wandoujia"{ manifestPlaceholders = [channelName: "wandoujia"] } } }
然后gradle build 就可以了