首页 > 代码库 > Eclipse项目转Android
Eclipse项目转Android
刚来某公司的时候,发现Android开发仍然还在使用Eclipse,编码无规范,渠道打包竟然手动,svn版本主干分支管理混乱,总之各种low。。。
对于有强迫症的我来说,属实不可忍。但无奈,新人一个,没有话语权。
经过几个月的磨练和见证,实战中终于可以雷厉风行的把自己最精锐的东西展示(说白了就像处女座的追求完美)。
前面讲述到了Android 开发规范 ,当然这是转载别人的,涵盖的范围还是比较广的。
另外还有Eclipse打包多渠道包,这个也是转载别人的,说明的很详细,当然这里面关系到我本地Eclipse版本和环境,因而gradle的版本以及语法都有不一致的地方,但关键是要看报错的信息,具体的问题具体分析,不懂的通过百度总能解决。再次有Eclipse打包多渠道包(库工程版),这个是在上一篇的基础上延伸的,全部都是自己爬坑,主要还是gradle的配置。
svn版本主干分支管理有专门的人员负责,主要是思想是:保证基线代码不被改得(主干),每个版本代码各一份(分支);版本迭代完成,合入到主干中去(我司就是这样),其实我觉得应该是基线代码也要区分版本保存,这样可以追查历史版本代码(真的很关键),就是基线不合 并(上家公司就是这样做)。
Android Studio(AS)出来的时候的确很多bug,不过相比Eclipse是恨人性化的IDE了。现在我使用的AS版本是2.3.2,因为gradle版本也是2.3.2,那么Eclipse项目转成AS项目,坑就比较多了。
1.我开始是Eclipse导出的方式生成gradle文件,再通过AS导入。这个方式有很多报错,主要是Eclipse导出的时候gradle版本是根据Eclipse版本生成,那么和AS环境就会冲突,报错在所难免,另外就是项目的文件结构和Eclipse差不多,看起来很不舒服,比较AS是有project、packages、Android这样的展示模式切换的。所以这个方式,拒绝。
2.我算是比较笨了,打开AS,创建一个AS项目,包名、项目名和Eclipse项目的包名、项目名一致;
3.将Eclipse项目相关的文件拷贝并替换AS项目下的文件,一般需要拷贝的是src、res、libs、AndroidManifest等;
4.这个时候项目肯定报错的。库工程换成compile的方式在build.gradle(app目录下的),如果找不到,那就把库工程的jar丢到libs中,res需要的全部拷贝到相应的位置。注意:需要的资源不能重复(jar、xml等)。
5.现在是配置文件的时候了:
1)settings.gradle的内容include ‘:app’ (意思是包含的module,如果还有其他的module,加上去) ;
2)local.properties :sdk.dir=E\:\\sdk(声明SDK的路径);
3)gradle.properties: (默认是org.gradle.jvmargs=-Xmx2048m,下面是我参考网上写的,加快编译打包速度)
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
4)build.gradle :默认生成,不需修改。
5)app/libs,放拷贝过来的jar包,注意:不要拷贝.so文件,下面说到.so文件的存放;
6)app/src/build.gradle:关键的文件,第一句apply plugin: ‘com.android.application‘,包含相关的配置sdk版本、资源文件、签名信息、混淆信息、生成包修改
渠道信息、编译依赖等;我会在文章最后贴出整个文件内容;
7)app/src下的androidTest和test文件夹下的java文件删除,如果你需要做单元测试,必须留着(单元测试不做扩展);
8)app/main文件夹下包含assets文件夹(Eclipse拷贝过来),java文件夹(核心java代码),res文件夹(Eclipse拷贝过来)、AndroidManifest和jnilibs(自己创建,
存放.so文件);
9)proguard-rules.pro:代码混淆文件,注意:里面如果有第三方jar包声明,必须删除,因为gradle添加依赖的时候已声明了。
到此,选择Build,Clean Project,这时报错,问题应该就是出现在app/src/build.gradle中了,如果是其他的问题,从头检查一遍。而对于app/src/build.gradle中出现的问题,要
结合log、message输出去做修改,因为不同版本的gradle的语法有些变化,因为根据报错信息能够解决一切报错,相信我,因为第一个项目的整个过程我花了2天的时候,第二个项目,我只花了半小时。
app/src/build.gradle文件全部内容
apply plugin: ‘com.android.application‘
android {
//编译sdk
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
multiDexEnabled true //允许多个dex文件
applicationId "com.xxx" //包名作为id
minSdkVersion 14 //最低版本sdk
targetSdkVersion 23 //最高版本sdk
versionCode 1 //版本code
versionName "1.0.0" //版本号
}
//执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
lintOptions {
abortOnError false //有报错的时候,依然继续执行
disable "ResourceType" //忽略代码上的资源类型警告
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
signingConfigs {
debug {
}
release {
//填写你的keystore路径和密码们(配置签名)
storeFile file("E:\\xxx.keystore")
storePassword "12345678"
keyAlias "android"
keyPassword "12345678"
}
}
buildTypes {
debug {
minifyEnabled false
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources false
}
release {
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources false
//前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
//签名
signingConfig signingConfigs.release
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith(‘.apk‘)) {
// 输出apk名称
//def fileName = "app_v${defaultConfig.versionName}_${releaseTime()}.apk"
def fileName = "android_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
productFlavors {//渠道信息配置
server {
manifestPlaceholders = [UMENG_CHANNEL_ID: "1"]
}
baidu{
manifestPlaceholders = [UMENG_CHANNEL_ID: "2"]
}
}
}
//工程依赖
dependencies {
compile fileTree(include: [‘*.jar‘], dir: ‘libs‘)
compile ‘com.android.support:appcompat-v7:25.3.0‘
compile ‘com.android.support:design:25.3.0‘
compile ‘com.youth.banner:banner:1.4.9‘
}
Eclipse项目转Android