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文件中添加一行代码如下

                

                ...

                

                

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

你可能感兴趣的:(Andriod Studio 3.2 导入ADT项目中的一些问题及解决 以及idea中大型springboot项目的一些配置)