刚来某公司的时候,发现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 Studio的更多相关文章

  1. Eclipse 项目导入 Android Studio 导致的乱码问题

    最近有一个 Eclipse 项目导入 Android Studio 1.4 时出现乱码,Build 提示 Error:(38, 5) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?. 源代码是 GB ...

  2. 将Eclipse项目导入Android Studio出现中文乱码的问题

    以前一直以Eclipse开发项目,最近正在研究Android Studio的使用,首先想到到的是将Eclispe项目导入AS. 可以方便查看以前写过的代码,然后出现了中文乱码的问题,通过搜索了一些资料 ...

  3. 手把手图文教你从Eclipse项目迁移Android Studio

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52937391 从Android的 ...

  4. android开发里遇到的坑——eclipse项目导入android studio以后Run按钮灰色

    android studio编译有错误但是没有提示给用户,关闭android studio重新启动项目后,会显示错误,修复以后即可!

  5. eclipse项目转android studio详解

    第一步:项目导入 向AS中导入项目的方法有两种(其实是一种). 方法一:是在eclipse中先导出为gradle(如图1),然后打开AS,找到项目中的gradle文件,直接导入. 方法二:直接在AS中 ...

  6. 从 Eclipse 导入项目到 Android Studio

    ADT已经有些过时了,现在比较流行的安卓开发工具是Android Studio,毕竟是谷歌一直在推广的. 最近装了as,从之前的adt迁移项目到as上,遇到了不少坎. 主要注意以下两点: (1)文件路 ...

  7. 从eclipse到Android studio/迁移eclipse的Android项目到Android studio平台的注意事项

    整体要注意的地方 先说明一下整体需要注意的地方 1在Android studio建立项目的时候,要注意包名和原来的完全一致,不然会有很多需要改动. 2依赖的jar一定一定要找齐,不然新建项目引用不到, ...

  8. 从Eclipse迁移到Android Studio碰到的问题记录

    背景: 1. 一直在做.NET的开发,工作之余,学习了一下Android开发,写了一些Demo,当时用的Eclipse开发工具:这两天,刚好项目不是很忙,就打算把之前写的Demo,迁移到Android ...

  9. Android studio:从Eclipse迁移到Android Studio【一】

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=255061&extra=page%3D2%26filter%3Dautho ...

随机推荐

  1. hdu 2680 Choose the best route 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目意思:实质就是给定一个多源点到单一终点的最短路. 卑鄙题---有向图.初始化map时 千万不 ...

  2. select下拉带图片-模拟下拉

    <style> /*下拉列表*/ ul,dl,ol,li {list-style: none;} .dropdown { float: right; position: relative; ...

  3. 无限轮播器的bug修复

    前言:上一回实现了轮播器的自动滚动,但是有两个需要处理的bug. 1.增加需求:当用手拖拽控制轮播器的时候,停止自动滚动. 2.当同一个页面中有tableView,textView或scrollvie ...

  4. iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别!

    在iOS开发中经常使用NSInteger和NSUInteger,而在其他的类似于C++的语言中,我们经常使用的是int.unsigned int.我们知道iOS也可以使用g++编译器,那么它们之间是否 ...

  5. Bootstrap-CSS:图片

    ylbtech-Bootstrap-CSS:图片 1.返回顶部 1. Bootstrap 图片 在本章中,我们将学习 Bootstrap 对图片的支持.Bootstrap 提供了三个可对图片应用简单样 ...

  6. nodejs 全局对象 global

    nodejs中有一个全局对象 global,所有的全局变量都是global对象的属性,glabal最根本的作用是作为全局变量的宿主, 全局变量: 1 在最外层定义的变量 2 全局对象的属性 3 隐式定 ...

  7. python mixin到底是什么 django

    1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类.其他类是如何获取Mixin中的方法因语言的不同而不同.所以有时候Mixin被描述为' ...

  8. (4)ASP.NET Core 中间件

    1.前言 整个HTTP Request请求跟HTTP Response返回结果之间的处理流程是一个请求管道(request pipeline).而中间件(middleware)则是一种装配到请求管道以 ...

  9. E20180402-hm

    cascade  n. 串联; 倾泻; 小瀑布,瀑布状物; restrict  vt. 限制,限定; 约束,束缚; strict adj. 精确的; 绝对的; 严格的,严谨的; [植] 笔直的; re ...

  10. 鸟哥私房菜基础篇:Linux是什么习题

    猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0110whatislinux.php#ex 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-你在你的 ...