参考文档
https://www.w3cschool.cn/intellij_idea_doc/intellij_idea_doc-785d2ea9.html
市场上常见的插件
- 1.GsonFormat
快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。
使用方法:快捷键Alt+S也可以使用Alt+Insert选择GsonFormat
- 2.AndroidButterKnife Zelezny
配合ButterKnife实现注解,从此不用写findViewById,想着就爽啊。在Activity,Fragment,Adapter中选中布局xml的资源id自动生成butterknife注解。
使用方法:Ctrl+Shift+B选择图上所示选项
- 3.AndroidCode Generator
根据布局文件快速生成对应的Activity,Fragment,Adapter,Menu。
-
- AndroidParcelable code generator
JavaBean序列化,快速实现Parcelable接口。
- 5.AndroidMethods Count
显示依赖库中得方法数
- 6.LifecycleSorter
可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K
- 7.CodeGlance
在右边可以预览代码,实现快速定位
- 8.findBugs-IDEA
查找bug的插件,Android Studio也提供了代码审查的功能(Analyze-Inspect Code…)
- 9.ADBWIFI
使用wifi无线调试你的app,无需root权限
Android wifi无线调试App新玩法ADB WIFI
- 10.AndroidPixelDimenGenerator
Android Studio自动生成dimen.xml文件插件
- 11.JsonOnlineViewer
在Android Studio中请求、调试接口
- 12.AndroidStyler
根据xml自动生成style代码的插件
插件开发基本流程
File-->new-->project
根据自己的版本,有的需要选择,new的第一步记得选择enable android
选择Intellij Platform Plugin SDK选择intellij专用
next-->选择文件名与项目存放路径-->finish
配置插件基本信息
修改plugin.xml文件
主要修改action节点这个节点就是菜单信息
编写代码实现需要的菜单功能
public class Helloworld extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
JOptionPane.showInputDialog("请输入");
}
}
点击运行按钮,运行会重开一个项目,新项目会显示新的菜单
选择菜单就会执行actionPerformed方法中的代码
生成AS中的插件
build之后会在工程中多出一个jar文件,直接去AS中按装这个插件就OK了
注意事项:目前新出的android studio 4.X版本有可能暂不支持
JavaBean项目
GenerateJavabeanByString
public class GenerateJavabeanByString extends AnAction {
private String member = "public";
//定义生成文件的协议
private String pasteStr = "name String\n" +
"age int\n" + "id Integer\n";
@Override
public void actionPerformed(AnActionEvent e) {
//点菜单的时候就会执行这个方法中的代码了
generateFile(e, "User", pasteStr);
}
private void generateFile(AnActionEvent actionEvent, String fileName, String pasteStr) {
//得到当前工程对象
Project project = actionEvent.getProject();
//得到目录服务
JavaDirectoryService directoryService = JavaDirectoryService.getInstance();
//得到当前路径(相对路径)
IdeView iveView = actionEvent.getRequiredData(LangDataKeys.IDE_VIEW);
PsiDirectory directory = iveView.getOrChooseDirectory();
//填入模版文件的参数
Map map = new HashMap();
map.put("NAME", fileName);
map.put("INTERFACES", "implements Serializable");
map.put("PACKAGE_NAME", CommonUtil.getPackageName(project));
//模块已经做好了,就可以生成文件
PsiClass psiClass = directoryService.createClass(directory, fileName, "GenerateFileByString", false, map);
//开始加入字段
WriteCommandAction.runWriteCommandAction(project,
new Runnable() {
@Override
public void run() {
generateModelField(pasteStr, project, psiClass);
}
});
}
private void generateModelField(String pasteStr, Project project, PsiClass psiClass) {
if (psiClass == null) {
return;
}
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
//根据用户输入的字符串生产出代码
//"name String\n"+"age int\n"+"id Integer\n";
String[] lineString = pasteStr.split("\n");
StringBuilder sb = new StringBuilder();
for (String line : lineString) {
String[] temp = line.split(" ");
String fieldName = temp[0];
String fieldType = temp[1];
//public String name;
sb.append(member + " " + fieldType + " " + fieldName + ";");
PsiField field = factory.createFieldFromText(sb.toString(), psiClass);
psiClass.add(field);
sb.delete(0, sb.length());
}
}
}
fileTemplates/GenerateFileByString.java.ft
模板文件生成代码格式
#if (${PACKAGE_NAME} != "")
package ${PACKAGE_NAME};
#end
#if (${INTERFACES} != "")
import java.io.Serializable;
#end
/**
* Created by ${USER} on ${DATE} ${TIME}
*/
public class ${NAME} ${INTERFACES}{
#if (${INTERFACES} != "")
private static final long serialVersionUID = 1L;
#end
}
工具类,包名需要从AndroiMenifest.xml 读取
public class CommonUtil {
/**
* 从AndroidManifest.xml文件中获取当前app的包名
*
* @return
*/
public static String getPackageName(Project project) {
String package_name = "";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(project.getBasePath() + "/app/src/main/AndroidManifest.xml");
NodeList nodeList = doc.getElementsByTagName("manifest");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element element = (Element) node;
package_name = element.getAttribute("package");
if(package_name!=null){
return package_name;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return package_name;
}