gradle 编译android APK


前提

我的环境是

Eclipse 4.2.1(android adt)
ADT v22.3.0-887826
Gradle 2.4

流程:
1.安装gradle以及配置环境变量就不多说了,网上搜一下一大堆。

2.首先在eclipse中选中的自己项目,然后export-》Android-》Genearte Gradle build files
此时,会在项目文件的最下面会出现一个build.gradle的文件,这个就是gradle的自动打包的配置文件。

3.我们还需要把项目转为为Gradle项目(如果你创建项目的时候以及功能选中了Gradle项目,就忽略这个步骤),选中自己的项目,右击鼠标Configure->Conver to Gradle Project。稍等一会,项目就会自动转化成功。此时你再右击项目的时候就会出现Gradle这个选项。

4.我们还需要更新一下Gradle的引用资源,以免打包的时候出现资源文件丢失,右击Gradle-》Refresh All。如果出现无法找到资源文件,检查一下项目的Properties的Java Path的Resource有没有引用项目的gen和src目录。

不过我这里只执行到第二步,并没有转换到gradle project    
目录如图


一定要注意版本的对应
这里首先需要修改根目录下面的gradle\wrapper\gradle-wrapper.properties 
修改 distributionUrl=http\://services.gradle.org/distributions/gradle-2.4-all.zip   这个看你下载的gradle版本

buildToolsVersion "19.1.0"
这个也需要对应版本,我的环境中最低的android SDK Build-tools 是 19.1.0,看


5.配置build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.+'
    }
}
apply plugin: 'android'

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

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

	//签名
	signingConfigs {
		myConfig{
			storeFile file("android.key")
			storePassword "123456"
			keyAlias "xtxk"
			keyPassword "123456"
		}
	}

	buildTypes{
		release {
			signingConfig signingConfigs.myConfig
		} 
	}
	//下面的代码开始打批量包  
    productFlavors {  
<span style="white-space:pre">		</span> txyyb{  
<span style="white-space:pre">		</span>    //替换manifest文件中的占位符(placeHolder)  
<span style="white-space:pre">			</span>manifestPlaceholders = [UMENG_CHANNEL_VALUE:"txyyb"]  
<span style="white-space:pre">		</span> }  
<span style="white-space:pre">		</span> wandaojia{  
<span style="white-space:pre">			</span>manifestPlaceholders = [UMENG_CHANNEL_VALUE:"wandaojia" ]    
<span style="white-space:pre">		</span> }  
<span style="white-space:pre">		</span> sjzs{  
<span style="white-space:pre">			</span>manifestPlaceholders = [UMENG_CHANNEL_VALUE:"360sjzs" ]    
<span style="white-space:pre">		</span> } 
<span style="white-space:pre">		</span> //在下面继续添加不同渠道的渠道代码  
    }  	
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

		packagingOptions {  
            exclude 'META-INF/DEPENDENCIES'  
            exclude 'META-INF/NOTICE'  
            exclude 'META-INF/LICENSE'  
            exclude 'META-INF/LICENSE.txt'  
            exclude 'META-INF/NOTICE.txt'  
        }  
		
		lintOptions{
		    abortOnError false
		}
	
		
        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
		
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
这个中需要注意的点:
 如果你的项目引用了一些Library Project,你还需要吧整个项目目录最外层的项目目录中的build.gradle的
          classpath 'com.android.tools.build:gradle:1.2.+'        这个需要对应gradle版本  
http://mvnrepository.com/artifact/com.android.tools.build/gradle/ 查询最新版本

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}
在实际开发中有很多工程引用到了android-support-v4.jar或者其他的jar包资源;
大家都知道gradle中从maven中央仓库中下载jar包的所以这时候我们可以写成
dependencies{
compile fileTree(dir:'libs',include:"*.jar")
compile 'com.android.support:support-v4:20.0.0'
}

7.修改完毕,在终端或者windows下的运营中,打开项目的路径,执行gradle clean 等built的success后再执行gradle build。打包成功后,会在项目的build-》outputs-》apk
在这个目录可以看到四个apk,分辨是debug版,debug未签名版,发布签版本,发布未签版。那需要的apk去用。

其他:如果你的项目中调用jni,也就是包含了so文件,这个时候你还需要添加这些内容
在progurad-project.txt
//noinspection all
task copyNativeLibs(type: Copy) {
    // third party lib so
    from(new File(projectDir, 'libs')) { include 'armeabi/*.so' }
    into new File(buildDir, 'native-libs')
}

tasks.withType(JavaCompile) {
    compileTask ->
        //noinspection all
        compileTask.dependsOn copyNativeLibs
}

//noinspection all
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
    pkgTask ->
        pkgTask.jniFolders = new HashSet<File>()
        pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}
在build.gradle中的sourceSets-》main中添加jniLibs.srcDirs=['libs']
sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }


manifest中添加友盟统计的key和渠道代码(关于友盟统计的key的获取和添加,直接参考友盟统计的文档,不多做解释)
打渠道包的目的是什么?为什么要打渠道包?这个可以见<<1.0apk批量打包认知>>
得到的结论,是要做统计。上面的文件中,使用了友盟统计。
此时需要在manifest.xml添加如下代码:
<!-- 渠道id,key直接使用umeng的,方便接入umeng sdk -->
        <meta-data android:name="UMENG_APPKEY" android:value="YOUR_APP_KEY" ></meta-data>
        <!--配置placeHolder(占位符),用于多渠道打包的时候替换-->
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值