#####无意间在android studio中看到了 MVP Generator 插件,插件的github地址为:https://github.com/stfalcon-studio/MVPHelper;插件的作者没有说明这个插件的具体使用方式,导致做为新手折腾了好一段时间啊,现在记录一下这个插件的使用方式,该插件主要是快速创建mvp框架,其中使用了MVP + Dagger + Rx , 是编写Kotlin代码时使用;
MVP Generator的使用注意事项:
####1.首先需要在android studio 中添加插件 Mvp Generator:
File -->Setting-->Plugins -->Browse repositories...,搜索Mvp Generator ,install ---> restart As;####3.此时会自动生成如图所示的类和文件夹
####4.此时生成的就是mvp的架子,但是你点开,发现全报错,why? 我就这完全不知所措了。。。。。
#####5.淡定,其实如果了解Dagger2的朋友,肯定知道,那就是我们需要导入一些依赖:
ext这个和dependencies同个级别,其实就是来控制依赖的版本,完全可以不用 ext { support_libraries_version = '25.3.1' dagger_version = '2.10' } 在项目 module的bulid.gradle的 dependencies {......}中添加如下: //Dagger compile 'com.github.stfalcon:mvphelper:0.2.1' compile "com.google.dagger:dagger:$dagger_version" compile "com.google.dagger:dagger-android:$dagger_version" compile "com.google.dagger:dagger-android-support:$dagger_version" annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version" annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version" kapt "com.google.dagger:dagger-compiler:$dagger_version" //Rx compile 'io.reactivex.rxjava2:rxjava:2.0.8' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' //新增kotlin kapt脚本 /** *注掉了kapt代码,因为kapt3不支持 */ Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > kotlin.jvm.internal.FunctionReference.<init>(ILjava/lang/Object;)V //kapt { // generateStubs = true //} kapt主要是为了生成DaggerAppComponent类,该类在app\build\generated\source\kapt\debug\com\example\szw\myapplication\di\components\DaggerAppComponent.java添加如图所示:
####6. 可能还需要在项目的build.gradle中添加依赖:
classpath 'com.novoda:bintray-release:0.3.4'####7.到这里差不多就算配置的差不多了,然后开始移动代码
在factories文件夹中可以看到两个类:ActivitiesInjectorFactories和FragmentsInjectorFactories, 如果你是创建的activity,那么会在xxxxxActivitySubComponent中生成 @Binds @IntoMap @ActivityKey(xxxxxActivity::class) internal abstract fun bindxxxxxActivityInjectorFactory( builder: xxxxxActivitySubComponent.Builder): AndroidInjector.Factory<out Activity>如果是fragment,在xxxxFragmentSubComponent中有如下代码:
@Binds @IntoMap @FragmentKey(xxxxFragment::class) internal abstract fun bindxxxxFragmentInjectorFactory(builder: xxxxFragmentSubComponent.Builder): AndroidInjector.Factory<out Fragment>把这些代码,如果是Activity中的就剪贴到ActivitiesInjectorFactories中; Fragment中的就剪贴到FragmentsInjectorFactories中。
2.如果是创建的fargment,同时需要在FragmentsInjectorFactories中的这段代码里添加:
@Module(subcomponents = arrayOf( // register your fragments' subcomponents here xxxxFragmentSubComponent::class //这里添加生成的xxxxFragmentSubComponent ))3.如果是创建的activity,同时需要在module文件夹下的AppModule类的下面代码中添加:
@Module(subcomponents = arrayOf( // register your activities' subcomponents here xxxxxActivitySubComponent::class //这里添加生成的xxxxxActivitySubComponent ))4.最后一步,就是把App这个配置到AndroidManifest.xml中去,如下:
<application android:name=".App" //就是这里 android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".login.LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>5.也是最重要的一步,就是需要重新编译,看能不能生成DaggerAppComponent类,如果没有,看下什么地方不对,在检查检查,就ok了。。
####新手自己使用怕忘了,就记录一下