`
hooray520
  • 浏览: 112764 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android使用gradle批量打包

 
阅读更多
    最近朋友推荐gradle,发现确实是个不错的打包工具,决定用它做项目管理,当然最主要的还是用到它的批量打包功能。
    零散的摸索了4,5天走了不少弯路,主要是gradle自身版本对应不同配置,新版本资料实在太少,走过来能跑通真的是要泪奔了,特记录下,大家少走弯路。
    使用的版本:
引用

    gradle-1.11
    jdk7.0
    eclipse Juno
   


    项目结构:
引用

    -game
    ---module1
    ---module2

   
   
    game下主要有三个文件
    1. local.properties
    sdk.dir=E:\\adt-bundle-windows-x86_64-20130917\\sdk

   
    2. settings.gradle
    include ':module1'
    include ':module2'
    //指定子模块module1和module2的相对路径
    project(':module1').projectDir = new File(settingsDir,    '../module1Path')
    project(':module2').projectDir = new File(settingsDir, '../module2Path')


    3. build.gradle
buildscript 
{
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

apply plugin: 'android'

dependencies {	    
    compile project(':module1')
    compile project(':module2')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"
    
    //签名
    signingConfigs {
      myConfig {
          storeFile file("xxx")      //签名文件
          storePassword "xxxx"    
          keyAlias "xxxx"             
          keyPassword "xxxxx"  //签名密码
      }
    }
  	
    buildTypes{	
    	release {
    	       signingConfig  signingConfigs.myConfig
                
                //代码混淆--集成了Proguard,配置文件proguard.cfg网上有很多参考,我就不贴了
                //注:我把某个jar包混淆了导致程序一直闪退
                //开始以为是so文件加载失败,这个问题找了一天才找到 泪奔...
    		runProguard true
    		proguardFile 'proguard.cfg'		
    	}
    }
		
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']           
       }

        //批量打包--指定配置文件
        //不同的渠道商对应的各自AndroidManifest
        //AndroidManifest的application标签只用配置渠道号的值
        //其他公共配置都放在公共的AndroidManifest.xml中
        selfTest {
	   manifest.srcFile 'product/AndroidManifest_selfTest.xml'
	}
	MMstore {
	   manifest.srcFile 'product/AndroidManifest_MMstore.xml'
	}
        instrumentTest.setRoot('tests')
    }
    
     //批量打包--声明
    productFlavors {
	selfTest {
            //这里可以配置不同的包名
	}
	MMstore {
	}
    }
	    
    lintOptions {
        
    	abortOnError false
        
        // if true, only report errors
        ignoreWarnings true
     }
	
      //加载so文件    
     task copyNativeLibs(type: Copy) {   
	      from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'  
     }  
     tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }  
	
     clean.dependsOn 'cleanCopyNativeLibs'  
	
     tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->  
            pkgTask.jniFolders = new HashSet()  
	    pkgTask.jniFolders.add(new File(projectDir, 'build/native-libs'))  
	}  
}


     子Module的build.gradle很简单,我就贴一个出来就好:
   
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
    
    lintOptions {
    	abortOnError false
        // if true, only report errors
        ignoreWarnings true
     }
}



     打包之前先
引用
gradle check
检查一遍,有问题就在build/link-result.html查看异常详情,里面的信息很详细。
     check没有问题就直接打包,执行命令
引用
gradle clean build
  几分钟后apk包就打好放在build/apk目录下面了
分享到:
评论
1 楼 perzect 2014-09-07  
作者能否更进一步分析下?例如,AndroidManifest中的不同渠道是如何配置的

相关推荐

Global site tag (gtag.js) - Google Analytics