您的位置:首页 > 编程语言 > Java开发

把eclipse的android libary库项目融入gradle项目中苦与乐

2016-07-26 14:18 447 查看
现在的主流android项目大多是as构建的,我也赶着时代潮流的尾巴,登上了as这辆车,对于ide的强烈的高要求情节,让我找了idea来开发,抱歉没有使用正版,太贵了,是从网上找的破解版,出于学习目的,并没有用于商业开发。

刚换了工作来到一个新公司,之前做的一个sdk是用ant构建的eclipse项目,它是一个库项目,给第三方使用,于是我就想转为gradle构建方法,并写一个子项目来验证sdk的各个功能,于是悲剧的小故事开始上演了。

在as中加入第三方项目的时候,一般的习惯是这样的



通常我们引入jar包使用,非常灵,引入第三方项目的时候通常是这样

<span style="font-size:18px;">compile 'com.android.support:appcompat-v7:24.1.1'</span>

如何引入eclipse版本的library呢,主要是两部要做

把项目构建为gradle版本
在test项目中引入library。
先说第一步构建gradle项目,主要是在项目中加入一个gradle文件,例如
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
defaultConfig {
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
useLibrary 'org.apache.http.legacy'
lintOptions {
abortOnError false
}
dexOptions {
javaMaxHeapSize "4g"
preDexLibraries = false
}
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 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')
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
//        compile 'com.android.support:appcompat-v7:24.1.1'
}
这里需要注意两点jdk的构建版本,如果原项目中使用版本比较低,你贸然使用1.8的版本,会比较悲剧,可能会出现以下问题

我这里使用的1.7,之前项目是1.6的,开始我使用的1.8构建的,出现的问题让我崩溃,后来才知道是jdk版本的问题。
第二个要注意的地方

//            resources.srcDirs = ['src']

这个地方我开始没有注释,结果一直报错,测试的activity.class解析不出来,我看了其他人的项目,没这个问题,可能这个过程我漏了什么。我个人理解是因为资源文件夹重复,在test项目中出现了重复性错误。总之如果出现问题,可是试一试。

接着需要把项目引入test项目,如果用第一图中的方式,会怎么样呢,就是添加module模块的方式,test项目会识别你的代码,不会出现语法错误,可是当build的时候,会告诉你不能识别library项目,不信的朋友自己试一试,保证百试不爽,再重复一遍,不是jar包,我们要引入library项目。那该怎么做呢?在test项目中的gradle文件加入下边这句话


这点还差点,还需要在setting的gradle文件中加入

划去的部分是项目名称,最后需要注意的两个地方
compile project ‘xxxxxx’,别出现这种低级错误
还有就是在之前eclipse的项目的gradle文件的头部是这样的

apply plugin: 'com.android.library'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息