Andriod Studio 3.2 导入ADT项目中的一些问题及解决 以及idea中大型springboot项目的一些配置

首先,本方法适用于Android Studio 3.2,因为butterKnife 和 androidannotation 的注解声明方式,在升到3.3版本过后,可能又会发生变化,所以不是很确定这些个注解开启的方法是否试用于 AS 3.3

把ADT项目,试用Eclipse的ADT插件,生成build.gradle 文件然后让AS 来import,可能是会出问题的. 因为AS 中的Android项目有2个build.gradle文件,一个时project的,一个事module的. 通常情况下,module的gradle文件,要gradle第一次build成功后才会生成(比如你从网上下下来的项目,虽然app目录里有这个build.gradle,但是如果gradle插件没有配置成功的话,是不会出现在AS的project视图中的,当然你可以在文件目录中找到它来修改,但是很麻烦). 而3.0+版本的AS的注解开启,都在module的build.gradle中,和project中的build.gradle没什么关系了(如果你看老旧的帖子,会发现要在project 的build.gradle中要添加关于apt的内容,也就是那些自动生成的generate文件的配置,但是在AS 3.0+版本中不用这么配置了),所以没有module中的build.gradle,很难开启那些注解声明(虽然准确地说,ADT生成的gradle是2合一的,但是各种出问题).

所以这里我推荐,新建一个组织名和项目名和ADT项目一样的AS项目,这样至少gradle的结构是正确了.然后把Android Manifest,src 和 res 中的文件,也就是我们自己写的代码,拷贝过来,其他的全不要了.x

配置项目的gradle插件版本,我这里project中的是 3.2.0 gradle-wrapper.properties中是4.6(有个说法是3.0+以上版本最好用这2个版本,这里3.2是android gradle插件的版本,AS 3.2->对应了3.2 而4.6则是本地gradle的版本,我写这个文章的时候,最高版本好像是5.2了 ADT项目中的版本还是2.3 无力吐槽)

gradle-wrapper.properties:

    distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
build.gradle(Project:app):

      dependencies {

        classpath 'com.android.tools.build:gradle:3.2.0'

//        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'  <-- 这个就是之前版本的做法,声明apt插件,现在不要了

        // NOTE: Do not place your application dependencies here; they belong

        // in the individual module build.gradle files

    }

接下来,我这里在执行gradle 的sync命令时,还发现Android Manifest出现了错误 一般这种情况,进入Manifest文件中,切换下面的Merged Manifest 视图, 会有红色的报错Error信息,按一下就到出错的行了去了,看看是不是activity或者service没给名字之类的错误.

此外,还会报一堆,compile,ImplementationTest 过时或者拼写错误的问题. 找到build.gradle(Module),

compile -> Implementation ImplementationTest -> androidTest 当然你也可能没有出现这个问题,如果试用的AS新建项目的话(也就是现在的这个方法,这个问题只是提一下,导入其他旧项目时经常出现,这个问题是gradle里的关键字变了). 具体怎么改问baidu或者Google,前几个搜索结果就是答案.

接下来是关键问题了,一般项目里都会用到ButterKnife和Androidannotation注解框架,这2个jar包.会自动生成文件,比较坑.千辛万苦找了这个帖子的方法,是正确的.其他的每一个对的,google出来的结果也不对. 转载别人的方法,留下原帖地址:

https://my.oschina.net/who7708/blog/2243748

关键就是找对地方,添加注释开启的配置,在帖子中就是这个配置:

javaCompileOptions {

    annotationProcessorOptions {

        includeCompileClasspath = true

        //这里的包名和applicationId一致

        arguments = [

                'resourcePackageName'  : android.defaultConfig.applicationId

                , "androidManifestFile": "$projectDir/src/main/AndroidManifest.xml".toString()

        ]

    }

}

这其中一般配到这样就可以了,原作者在arguments中还配了一些其他东西,我的项目中没有配置也没有问题. 毕竟加下划线这些都是默认配置. 一个的配置,同时搞定了butterknife和Androidannotation. 这里有一点说一下,arguments中第一个参数,applicationId,通常是自带在defaultConfig中的, 我这里贴一段:

android {

    compileSdkVersion 27

    useLibrary 'org.apache.http.legacy'

    defaultConfig {

        applicationId "xx.xx.xx" // <-- 你自己的项目

        minSdkVersion 19

        targetSdkVersion 27

        versionCode 16

        versionName "1.6.34"

        ...

        ....

如果没有的话,请加上.

这里还有一个 useLibrary 的属性,是因为我的项目中用到了apache的http类jar包,可能是叫这个名字的包有几个吧,发生了重复的问题,类文件import的时候显示找不到这个包,加上这个属性就好了(当然,我估计也和我用的jar包是本地lib有关系,如果是写在dependecies中的话,应该就没有关系了).

贴一下我的dependencies,说一下里面一些东西,我就写在注解里了

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])  // <-- 这句话是声明本地的lib库,当然,AS自动生成项目的话,都有的 我的这个项目,依赖的jar包都在本地lib里,所以不要忘记从老的ADT项目中复制过来. 此外,如果gradle sync不通过的话,这些jar包是不会被识别的,然后项目中的import会全都报错...

    implementation 'com.android.support:appcompat-v7:27.1.1'

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

//    implementation 'com.android.support:support-v4:27.1.1'

    //这里是依赖的v4包,这里要说一下,AS中有时候会自动依赖上,所以加不加貌似都没事影响,而且看你有没有用到v4包中的组件了  要注意,这里的版本好最好和上方v7包的依赖版本保持一致

    //我的项目中,出现了一个本地lib中已经添加了v4的坑.会报一个如下错误

  // Program type already present: android.support.v4.app.FragmentActivity$1

  //这里可能不一定是FragmentActivity$1 也可能是别的, 查了半天stackoverflow  试了一下其中的一个说法,成功了

  //这个问题的错误是,已经有一个v4包了,  你可以把v4的依赖去了,然后哉看看本地lib中有没有重复的包

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

//    annotationProcessor "org.androidannotations:androidannotations:$AAVersion"

//    implementation "org.androidannotations:androidannotations-api:$AAVersion"

    //下面这点是照抄之前androidannotation帖子的依赖的

    // as 3.0 之后的用法

    // 增加android annotation 注解框架,增强开发效率

    annotationProcessor group: 'org.androidannotations', name: 'androidannotations', version: "$AAVersion"

    implementation group: 'org.androidannotations', name: 'androidannotations-api', version: "$AAVersion"

    api 'com.jakewharton:butterknife:8.8.1'

    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

//    api 'com.jakewharton:butterknife:7.0.1'

//    annotationProcessor 'com.jakewharton:butterknife-compiler:7.0.1'

//我项目中butterknife是7.0.1 bind注解是@Bind(R.id.xx) 但是不知道为何,这个版本不好使.

//在8.8.1 版本中的绑定已经换语法了 是@BindView(R.id.xx) 没办法,只能全部都替换了, 不过我觉得这个应该问题不大,此外,不要忘记把本地lib中的 butterknife jar包给删了    当然,我觉得这个应该不是什么大问题

}

最后,还有一个问题,那就是ADT插件中获取app版本号,是从Android Manifest中的android:versionName=XX 来获取的,但是这个在方法在AS中是完全没用的,AS 中的app版本控制是 build.gradle(module) 中的versionCode和versionName来定义的. 默认创建的项目中,这里是1 要记得改啊.

说完了...把一个旧的ADT项目导入AS中....个人认为..还是很复杂的,就算会了也很麻烦.

此外附上idea中导入STS大型springboot项目的一些注意点,这个比较少,因为springboot工程在eclipse和idea中都差不多.(说到底还是eclipse太垃圾了,功能少不友好就不说了,还巨卡)

1.下载lombok插件 Setting->Compiler->Annotation Processors->Enable annotation processors

2.Setting->File Encodings 把global encoding,Project encoding,Properties Files 都改成UTF-8

3.解决启动时 Command line is too long 的错误,在项目/.idea/workspace.xml文件中添加一行代码如下

                <component name="PropertiesComponent">

                ...

                <property name="dynamic.classpath" value="true" />

                </component>

4.启动环境的 Run/debug Configuration 设置

i)Working directory -> $MODULE_WORKING_DIR$

ii)Shorten Command Line -> classpath file - java WrapperClass classpathFile [args]

iii)Enable launch optimization 和 Enable JXM arguments

iv)On 'Update' action -> Update classes and resources
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容