1.如何做 android studio 自动生成代码插件
1.介绍 在使用Android Studio开发的时候,大部分人都会使用一些插件来提高开发效率,比如:ButterKnife 自动生成注解代码 PermissionsDispatcher 更方便的进行Android 6.0权限处理 像这样的插件还有很多很多,但我们不能一直停留在用的程度,这样太不符合程序猿的风格了,今天就让我们自己动手来写一个插件,当以后自己有好的想法的时候,也能写一个出色的插件给大家使用。
想到以前写系统原生dialog的时候还要写一大串代码,简直太麻烦,今天就用这个做例子,写一个插件来实现一键生成dialog代码。注:本文只是为了熟悉Android Studio插件开发,所以用一个比较简单的例子来演示。
2.环境搭建 首先需要安装IntelliJ IDEA 安装完成后,运行起来是这个样子的:IntelliJ IDEA 点击Create New Project新建一个Plugin项目,填写项目名称,选择位置就可以点击finish了。New Project 项目结构如下图所示:项目结构 src目录下建包,和平时使用Android Studio的方式是一样的。
到这里,环境就搭建成功了(^-^)V3.编写插件 新建Action 在新建的包下建一个Action类 New Action 然后填写一些信息 填写信息 ActionID:Action唯一的ID,一般的格式为:pluginName.ID ClassName:类名 Name:插件最终显示在菜单上的名称 Description:对这个Action的描述信息 然后往下,选择插件在菜单中的位置,这里选择的是Code菜单下第一的位置,然后定义一个快捷键。点击OK,就创建了一个Action类了,public class CreateDialogAction extends BaseGenerateAction { public CreateDialogAction() { super(null); } public CreateDialogAction( handler) { super(handler); } @Override public void actionPerformed(AnActionEvent e) { } } 注意把继承的AnAction改成BaseGenerateAction,下文需要用到BaseGenerateAction类中的相关方法。
代码实现 主要实现在类中自动生成代码,首先获取相关的操作类,已在代码中加入注释说明。public class CreateDialogAction extends BaseGenerateAction { public CreateDialogAction() { super(null); } public CreateDialogAction( handler) { super(handler); } @Override public void actionPerformed(AnActionEvent e) {// 获取编辑器中的文件 Project project = e.getData(PlatformDataKeys.PROJECT); Editor editor = e.getData(PlatformDataKeys.EDITOR); PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, project);// 获取当前类 PsiClass targetClass = getTargetClass(editor, file);// 获取元素操作的工厂类 PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);// 生成代码 new LayoutCreator(project, targetClass, factory, file).execute(); } } 生成代码,需要继承WriteCommandAction.Simple类,在run方法中写生成代码的逻辑,将生成dialog的代码存入StringBuilder,然后调用targetClass类中的add方法生成代码,最后再导入需要的类。
public class LayoutCreator extends WriteCommandAction.Simple { private Project project; private PsiFile file; private PsiClass targetClass; private PsiElementFactory factory; public LayoutCreator(Project project, PsiClass targetClass, PsiElementFactory factory, PsiFile。 files) { super(project, files); this.project = project; this.file = files[0]; this.targetClass = targetClass; this.factory = factory; } @Override protected void run() throws Throwable {// 将弹出dialog的方法写在StringBuilder里 StringBuilder dialog = new StringBuilder(); dialog.append("public void showDialog(){"); dialog.append("android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder(this);"); dialog.append("builder.setTitle(\"Title\")\n"); dialog.append(".setMessage(\"Dialog content\")\n"); dialog.append(".setPositiveButton(\"OK\", new android.content.DialogInterface.OnClickListener() {\n" +"@Override\n" +"public void onClick(DialogInterface dialog, int which) {\n" +"\t\n" +"}" +"})\n"); dialog.append(".setNegativeButton(\"Cancel\", new DialogInterface.OnClickListener() {\n" +"@Override\n" +"public void onClick(DialogInterface dialog, int which) {\n" +"\t\n" +"}" +"})\n"); dialog.append(".show();"); dialog.append("}");// 将代码添加到当前类里 targetClass.add(factory.createMethodFromText(dialog.toString(), targetClass));// 导入需要的类 JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project); styleManager.optimizeImports(file); styleManager.(targetClass); } } 点击编译器右上角的绿色Run按钮,会重新启动一个新的IntelliJ IDEA的界面,在这里创建一个Android工程,点击Code,会看到Android Dialog选项,看下效果:Android Dialog OK,到这里我们就成功的创建了一个插件,下面让我们来看看如何来部署插件。
4.部署插件 填写相关信息 打开项目中的plugin.xml文件,填写相关的信息,这些信息会展示在插件库中,如下。
2.android studio 怎么写代码
您好,Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle
Project ,有时新建项目的时候报 Gradle Project Compile Error 等等相关的问题
解决这些问题办法是
首先打开android studio项目 找到项目目录gradle\wrapper\gradle-wrapper.properties这个文件
内容如下
#Wed Apr 10 15:27:10 PDT
2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=.example.admin.myapplication.HaolvTest.setUp(HaolvTest.java:18) at junit.framework.TestCase.runBare(TestCase.java:139) 。
Process finished with exit code -1123456789123456789 然后简单搜索了一下,也没发现什么有价值的答案,后来直接看了原来默认的ExampleUnitTest的编写方式,发现它并没有继承自AndroidTestCase,而是直接在方法上加了一个Test注解,然后我也把我的测试用例代码改成这样,果然可以测试通过,然后添加了一个已知的错误来测试,如下:@Test public void testAddAct(){ assertEquals(0, AppManager.getInstance().actSize()); SplashActivity splashActivity = new SplashActivity(); AppManager.getInstance().addActivity(splashActivity); assertEquals(1, AppManager.getInstance().actSize()); AppManager.getInstance().addActivity(splashActivity); assertEquals(1, AppManager.getInstance().actSize()); }123456789123456789 这个时候执行的结果是错误的,如下:Expected :1 Actual :2
.. 可以看到期望是1,实际值是2,所以可以测试出addActivity这个方法还需要优化。总结:在AS环境下,写测试用例更方便了,啥都不用准备了,直接在ExampleUnitTest写个方法@Test就行,方法内容主要就是通过assertEquals去判断等,后面再细细研究,这里先开个头,做个准备工作。
(以上部分文字和代码参考《第一行代码》13.5小节) 在新建一个Android Project后,会发现在在src目录下有三个子目录,分别是androidTest、main、test目录,搜索了一下,得知androidTest目录是Android Instrumentation Tests的文件夹(Instrumentation :模拟、使用仪器),test目录是Unit Tests的文件夹。
看来要进行真正的Android测试,应该是在androidTest目录下编写测试用例。
转载请注明出处育才学习网 » android自动代码怎么写