在開發過程中有很多重復的代碼沒有必要每次詳細的編寫,下面以一鍵生成MVP相關代碼以及對應的Fragment或者Activity
首先去intellij idea官網下在開發環境,可以免費使用三十天;
1、創建插件項目,File->New ->Project 打開窗口后選擇Intellij Platform Plugin,選擇對應的Project SDK版本,點擊Next選擇位置,示意圖如下:
創建插件項目.png
2、在src中創建Action幫助,New->Plugin Devkit -> Action,輸入相關的信息,選擇Action的分組、位置以及快捷鍵等想信息,選擇group分組最好根據你具體的插件的功能決定,比如生成代碼的功能可以在CodeMenu中也可以在NewGroup更方便,創建完成后可以在resources->plugin.xml中看到注冊的Action信息,可以修改發布插件的其他相關信息;
創建Action.png
<idea-plugin>
<id>com.hpaopao.mvp</id>
<name>MvpGenerater</name>
<version>1.0</version>
<vendor email="bitxiaozhang@163.com" url="http://www.×××××.com">杭州×××××有限公司</vendor>
<description><![CDATA[
Generate Code File for MVP,Acticity,Fragment,Contract,Presenter,Model<br>
<em>most HTML tags may be used</em>
]]></description>
<change-notes><![CDATA[
create the mvp contruct,set the BaseActivity and BaseFragment
<em>most HTML tags may be used</em>
]]>
</change-notes>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="145.0"/>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<!-- uncomment to enable plugin in all products
<depends>com.intellij.modules.lang</depends>
-->
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<actions>
<!-- Add your actions here -->
<action id="Android.Activity.MvpHelpers" class="com.MvpGeneratorAction" text="ActivityMvp"
description="generate mvp relatived code files:Activity ,Fragment,Contract,Model,Presenter">
<add-to-group group-id="NewGroup" anchor="first"/>
<keyboard-shortcut keymap="$default" first-keystroke="shift ctrl alt G"/>
</action>
<action id="Android.Fragment.MvpHelpers" class="com.MvpGeneratorAction" text="FragmentMvp"
description="generate mvp relatived code files:Activity ,Fragment,Contract,Model,Presenter">
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="Android.Activity.MvpHelpers"/>
</action>
</actions>
</idea-plugin>
3、在創建的Action類中,覆蓋actionPerformed方法,加入相關的業務邏輯代碼,舉例:
@Override
public void actionPerformed(AnActionEvent e) {
// TODO: insert action logic here```
mProject = e.getData(PlatformDataKeys.PROJECT);
mPackageName = getPackageName();
DataContext dataContext = e.getDataContext();
VirtualFile file = DataKeys.VIRTUAL_FILE.getData(dataContext);
if (file != null && file.exists()){
mMenuRelativePath = file.getPath();
handleMenuPackagePath();
}else{
throw new RuntimeException("未獲取到文件夾路徑!");
}
}
4、創建生成代碼的模板文件,我這里直接寫到txt文件中創建時直接替換掉相關的信息,比如創建Activity的模板文件的內容:
package $packagename.activity;
import android.os.Bundle;
import $basemvppackage.mvp.BaseActivity;
import $packagename.mvp.$nameContract;
import $packagename.mvp.$nameModel;
import $packagename.mvp.$namePresenter;
import $basepackagename.R;
/**
* @author $author
* @Package $packagename
* @Description: $description
* @date $date
**/
public class $nameActivity extends BaseActivity<$namePresenter,$nameModel> implements $nameContract.View{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected int getLayoutId() {
return 0;
}
@Override
protected void initPresenter() {
mPresenter.setVM(this,mModel);
}
@Override
protected void initView(){
}
@Override
public void showLoading(String content) {
}
@Override
public void stopLoading() {
}
@Override
public void showErrorTip(String msg) {
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
5、創建Dialog輸入相關的信息,替換模板中的相關字段,比如authorName和ModuleName,運行效果如下,項目地址
Screenshot from 2017-10-19 14:26:55.png