gradle 编译android APK
2015-06-09 11:16
387 查看
前提
我的环境是
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目录。
[align=left]不过我这里只执行到第二步,并没有转换到gradle project [/align]
[align=left]目录如图[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]一定要注意版本的对应[/align]
[align=left]这里首先需要修改根目录下面的gradle\wrapper\gradle-wrapper.properties [/align]
[align=left]修改 distributionUrl=http\://services.gradle.org/distributions/gradle-2.4-all.zip 这个看你下载的gradle版本[/align]
[align=left]
[/align]
[align=left]
[align=left]
[/align]
[align=left]
[/align]
[align=left]5.配置build.gradle
[/align]
[align=left] 如果你的项目引用了一些Library Project,你还需要吧整个项目目录最外层的项目目录中的build.gradle的[/align]
[align=left] classpath 'com.android.tools.build:gradle:1.2.+' 这个需要对应gradle版本 [/align]
[align=left]http://mvnrepository.com/artifact/com.android.tools.build/gradle/ 查询最新版本
[/align]
[align=left]
[/align]
[align=left]在实际开发中有很多工程引用到了android-support-v4.jar或者其他的jar包资源;[/align]
[align=left]大家都知道gradle中从maven中央仓库中下载jar包的所以这时候我们可以写成[/align]
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
manifest中添加友盟统计的key和渠道代码(关于友盟统计的key的获取和添加,直接参考友盟统计的文档,不多做解释)
打渠道包的目的是什么?为什么要打渠道包?这个可以见<<1.0apk批量打包认知>>
得到的结论,是要做统计。上面的文件中,使用了友盟统计。
此时需要在manifest.xml添加如下代码:
我的环境是
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目录。
[align=left]不过我这里只执行到第二步,并没有转换到gradle project [/align]
[align=left]目录如图[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]一定要注意版本的对应[/align]
[align=left]这里首先需要修改根目录下面的gradle\wrapper\gradle-wrapper.properties [/align]
[align=left]修改 distributionUrl=http\://services.gradle.org/distributions/gradle-2.4-all.zip 这个看你下载的gradle版本[/align]
[align=left]
[/align]
[align=left]
buildToolsVersion "19.1.0"这个也需要对应版本,我的环境中最低的android SDK Build-tools 是19.1.0,看[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]5.配置build.gradle
[/align]
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') } }这个中需要注意的点:
[align=left] 如果你的项目引用了一些Library Project,你还需要吧整个项目目录最外层的项目目录中的build.gradle的[/align]
[align=left] classpath 'com.android.tools.build:gradle:1.2.+' 这个需要对应gradle版本 [/align]
[align=left]http://mvnrepository.com/artifact/com.android.tools.build/gradle/ 查询最新版本
[/align]
[align=left]
[/align]
dependencies { compile fileTree(dir: 'libs', include: '*.jar') }
[align=left]在实际开发中有很多工程引用到了android-support-v4.jar或者其他的jar包资源;[/align]
[align=left]大家都知道gradle中从maven中央仓库中下载jar包的所以这时候我们可以写成[/align]
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}" />
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories