關於kotlin插件 MVP Generator的使用方式

無意間在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;

2.在項目app module中java包下創建相應的模塊文件夾名稱,右鍵new–>+mvp–>選擇創建Activity或者fragment–>輸入要創建的Activity或者fragment名稱,例如:login, 同時需要點擊kotlin base DI classes,生成di文件夾及代碼;

這裏寫圖片描述

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.到這裏差不多就算配置的差不多了,然後開始移動代碼

  1. 在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
))
  1. 如果是創建的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了。。

新手自己使用怕忘了,就記錄一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章