使用Gradle打包apk
發表時(shí)間:2020-11-13
發布人(rén):融晨科技
浏覽次數:67
前提
Eclipse 4.4.1
ADT 23.0.4
Gradle 2.2.1
流程:
1.安裝gradle以(yǐ)及配置環境變量就(jiù)不(bù)多說(shuō)了(le/liǎo),網上(shàng)搜一下一大(dà)堆。
2.首先在(zài)eclipse中選中的(de)自己項目,然後export-》Android-》Genearte Gradle build files
此時(shí),會在(zài)項目文件的(de)最下面會出(chū)現一個(gè)build.gradle的(de)文件,這(zhè)個(gè)就(jiù)是(shì)gradle的(de)自動打包的(de)配置文件。
3.我們還需要(yào / yāo)把項目轉爲(wéi / wèi)爲(wéi / wèi)Gradle項目(如果你創建項目的(de)時(shí)候以(yǐ)及功能選中了(le/liǎo)Gradle項目,就(jiù)忽略這(zhè)個(gè)步驟),選中自己的(de)項目,右擊鼠标Configure->Conver to Gradle Project。稍等一會,項目就(jiù)會自動轉化成功。此時(shí)你再右擊項目的(de)時(shí)候就(jiù)會出(chū)現Gradle這(zhè)個(gè)選項。
4.我們還需要(yào / yāo)更新一下Gradle的(de)引用資源,以(yǐ)免打包的(de)時(shí)候出(chū)現資源文件丢失,右擊Gradle-》Refresh All。如果出(chū)現無法找到(dào)資源文件,檢查一下項目的(de)Properties的(de)Java Path的(de)Resource有沒有引用項目的(de)gen和(hé / huò)src目錄。
5.配置build.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.14.+' } } apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') ....//你所應用的(de)包,這(zhè)裏是(shì)每個(gè)項目不(bù)同,不(bù)需要(yào / yāo)更改 } android { compileSdkVersion 17 buildToolsVersion "21.1.2" signingConfigs { myConfig{ storeFile file("/home/eminem/my.keystore") //雙引号裏面填是(shì)簽名文件的(de)絕對路徑,我這(zhè)裏的(de)是(shì)Ubuntu系統 storePassword "簽名的(de)密碼" keyAlias "包名" keyPassword "簽名應用的(de)密碼" } } buildTypes{ release { signingConfig signingConfigs.myConfig } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // 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') packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } lintOptions { <span style="white-space:pre"> </span>abortOnError false } } }
修改完畢保存。
注意:如果你的(de)項目引用了(le/liǎo)一些Library Project,你還需要(yào / yāo)吧整個(gè)項目目錄最外層的(de)項目目錄中的(de)build.gradle的(de)
dependencies { classpath 'com.android.tools.build:gradle:0.14.+' }
修改一下。
6.修改項目中的(de)gradle配置
你還需要(yào / yāo)修改項目目錄中的(de)gradle-》wrapper-》gradle-wrapper.properties 修改distributionUrl指向的(de)版本
distributionUrl=http\://services.gradle.org/distributions/gradle-2.1-all.zip
7.修改完畢,在(zài)終端或者windows下的(de)運營中,打開項目的(de)路徑,執行gradle clean 等built的(de)success後再執行gradle build。打包成功後,會在(zài)項目的(de)build-》outputs-》apk
在(zài)這(zhè)個(gè)目錄可以(yǐ)看到(dào)四個(gè)apk,分辨是(shì)debug版,debug未簽名版,發布簽版本,發布未簽版。那需要(yào / yāo)的(de)apk去用就(jiù)。
其他(tā):如果你的(de)項目中調用jni,也(yě)就(jiù)是(shì)包含了(le/liǎo)so文件,這(zhè)個(gè)時(shí)候你還需要(yào / yāo)添加這(zhè)些内容
在(zài)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')) }
在(zài)build.gradle中的(de)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'] }
關于(yú)adt的(de)版本跟gradle的(de)對應關系,參考這(zhè)篇文章
http://blog.csdn.net/qq634416025/article/details/40361931