CN115098076A - 一种用于Android系统的代码生成方法 - Google Patents
一种用于Android系统的代码生成方法 Download PDFInfo
- Publication number
- CN115098076A CN115098076A CN202210840434.7A CN202210840434A CN115098076A CN 115098076 A CN115098076 A CN 115098076A CN 202210840434 A CN202210840434 A CN 202210840434A CN 115098076 A CN115098076 A CN 115098076A
- Authority
- CN
- China
- Prior art keywords
- template
- code
- code generation
- file
- content
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了车载系统领域内的一种用于Android系统的代码生成方法,包括以下步骤,步骤1,清单与代码模板制作;步骤2,工具制作;步骤3,工具使用代码模板生成对应的代码;能够将Android中AIDL模式的通讯的所有内容全部进行自动化代码生成,提供开发用的编译jar和实际运行的运行jar,本工具可以基于WPF进行开发,有很好的windows兼容性,操作过程简单、效率高、大大缩短项目中该模块的开发时间,提升代码健壮性、大大减少人为导致的错误,在项目中能够适应快速迭代开发模式。
Description
技术领域
本发明涉及车载系统领域内的代码生产方法。
背景技术
主机厂提供设计一套对外的统一接口,但是没有做实现,由于接口数量过于庞大,会导致写大量的代码,且接口不断变化,人工编写会导致很多不一致的问题。在 Android中,一个进程通常无法访问另一个进程的内存。因此,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象。编写执行该编组操作的代码较为繁琐。
发明内容
本发明的目的是提供一种用于Android系统的代码生成方法,操作过程简单、效率高、大大缩短项目中该模块的开发时间,提升代码健壮性、大大减少人为导致的错误,在项目中能够适应快速迭代开发模式。
为实现上述目的,本发明提供了一种用于Android系统的代码生成方法,包括以下步骤,步骤1,清单与代码模板制作;步骤2,工具制作;步骤3,工具使用代码模板生成对应的代码。
与现有技术相比,本发明的有益效果在于,能够将Android中AIDL模式的通讯的所有内容全部进行自动化代码生成,提供开发用的编译jar和实际运行的运行jar,本工具可以基于WPF进行开发,有很好的windows兼容性,操作过程简单、效率高、大大缩短项目中该模块的开发时间,提升代码健壮性、大大减少人为导致的错误,在项目中能够适应快速迭代开发模式。
作为本发明的进一步改进, 步骤1中清单制作的具体内容如下,明确需要进行代码生成的内容,从代码的结构来分析,包括包体、类体、方法体的内容,进行excel接口清单文件的设计,清单文件中的字段根据实际需要进行动态调整;对于用于代码生成的生成逻辑判断的字段,要进行对应的描述。
作为本发明的进一步改进,步骤1中制作代码模板的具体内容如下,
将不变的内容和变化的内容先做分离,不变的内容可以直接按照代码的方式写入到模板中;变化的内容再进行抽象,变化的内容使用占位符表示,与共通的内容写入模板;包括如下必要模板,
AIDL模板,用于AIDL文件的生成;
主模板,用于主体的代码生成:服务连接、服务重连、事件处理、copyright、import部分、成员变量、通用方法;
方法模板,用于方法的代码生成;
常量模板:用于各个常量的代码生成;
Stub模板,用于AIDL机制的服务代理的代码生成。
作为本发明的进一步改进, AIDL模板包括以下内容,
1、生成的文件是以.aidl为后缀;2、模板内容分2个部分,文件头部分和方法部分。
作为本发明的进一步改进,主模板包括以下内容,
1、copyright说明2、import部分的说明;3、类的声明;4、成员变量的声明;5、通用方法部分。
作为本发明的进一步改进,方法模板包括以下内容,方法模板描述的是具体清单文件中的接口:
1、第一个方法模板:该方法模板描述的void类型的返回值,方法名称、方法注释、方法参数以及最后的调用;
2、第二个方法模板,描述的有返回值、方法名称、方法注释、方法参数以及最后的调用的情况。
作为本发明的进一步改进,常量模板包括以下内容,
1、Manifest模板,基于Android的安全机制,需要在AndroidManifest.xml中声明相关的权限;
2、服务常量模板:包括有ACTION、PACKAGE_NAME、CLASS_NAME这3个常量是关联到清单文件中对应的字段的。
作为本发明的进一步改进, Stub模板的占位符都会在代码生成时,使用清单中的对应的字段的内容进行替换。
作为本发明的进一步改进,步骤2的具体内容如下,
步骤2.1,导入excel接口清单文件;步骤2.2,设置aidl和代码生成的目录;步骤2.3,根据字段生成对应的文件夹;步骤2.4,根据模板生成对应的类文件;步骤2.5,在生成的类文件中根据方法或者函数模板生成对应的接口方法。
作为本发明的进一步改进,步骤3的具体内容如下,
步骤3.1,工具首先读取内置的模板文件,即后缀名为.hsaetemplate的文件,在运行界面中点击“浏览”用来选择清单文件,“代码目录”用来选择代码生成的目录,最后点击生成,完成代码生成动作;
步骤3.2,生成编译jar和运行jar:使用项目的Android系统源码环境,编写Android.mk或者Android.bp文件,进行模块化编译,生成对应的编译jar和运行jar。
附图说明
图1为本发明中的制作清单文件的字段和及描述图。
图2为本发明中AIDL模板的文件头部分程序图。
图3为本发明中AIDL模板的方法部分程序图。
图4为本发明中主模板的copyright说明的具体程序图。
图5为本发明中主模板的import部分的具体程序图。
图6为本发明中主模板类的声明的具体程序图。
图7为本发明中主模板的成员变量的声明的具体程序图。
图8为本发明中主模板的成员变量的声明中成员变量的描述图。
图9为本发明中主模板的通用方法部分的具体程序图。
图10为本发明中方法模板的第一个方法模板的具体程序图。
图11为本发明中方法模板的第二个方法模板的具体程序图。
图12为本发明中常量模板的Manifest模板的具体程序图。
图13为本发明中常量模板的服务常量模板的具体程序图。
图14为本发明中Stub模板的具体程序图。
图15为本发明中工具制作流程图。
图16为本发明中模板文件内置在工具的示意图。
图17为本发明中工具做成后的运行界面图。
图18为实际使用时部分文件夹、aidl以及java文件截图。
图19为实际使用时生成的文件数量截图。
具体实施方式
下面结合附图对本发明进一步说明:
如图1-19所示的一种用于Android系统的代码生成方法,包括以下步骤,
步骤1,清单与代码模板制作;
明确需要进行代码生成的内容,从代码的结构来分析,包括包体、类体、方法体的内容,进行excel接口清单文件的设计,清单文件中的字段根据实际需要进行动态调整;对于用于代码生成的生成逻辑判断的字段,要进行对应的描述。
制作代码模板的具体内容如下,
将不变的内容和变化的内容先做分离,不变的内容可以直接按照代码的方式写入到模板中;变化的内容再进行抽象,变化的内容使用占位符表示,与共通的内容写入模板;包括如下必要模板,
一、AIDL模板,用于AIDL文件的生成;
1、生成的文件是以.aidl为后缀;
2、模板内容分2个部分,文件头部分和方法部分。
二、主模板,用于主体的代码生成:服务连接、服务重连、事件处理、copyright、import部分、成员变量、通用方法;
1、copyright说明
2、import部分的说明;
3、类的声明;
4、成员变量的声明;
5、通用方法部分。
三、方法模板,用于方法的代码生成;描述的是具体清单文件中的接口:
1、第一个方法模板:该方法模板描述的void类型的返回值,方法名称、方法注释、方法参数以及最后的调用;
2、第二个方法模板,描述的有返回值、方法名称、方法注释、方法参数以及最后的调用的情况。
四、常量模板:用于各个常量的代码生成;
1、Manifest模板,基于Android的安全机制,需要在AndroidManifest.xml中声明相关的权限;
2、服务常量模板:包括有ACTION、PACKAGE_NAME、CLASS_NAME这3个常量是关联到清单文件中对应的字段的。
五、Stub模板,用于AIDL机制的服务代理的代码生成。
Stub模板的占位符都会在代码生成时,使用清单中的对应的字段的内容进行替换。
步骤2,工具制作;
步骤2.1,导入excel接口清单文件;
步骤2.2,设置aidl和代码生成的目录;
步骤2.3,根据字段生成对应的文件夹;
步骤2.4,根据模板生成对应的类文件;
步骤2.5,在生成的类文件中根据方法或者函数模板生成对应的接口方法。
步骤3,工具使用代码模板生成对应的代码。
步骤3.1,工具首先读取内置的模板文件,即后缀名为.hsaetemplate的文件,在运行界面中点击“浏览”用来选择清单文件,“代码目录”用来选择代码生成的目录,最后点击生成,完成代码生成动作;
步骤3.2,生成编译jar和运行jar:使用项目的Android系统源码环境,编写Android.mk或者Android.bp文件,进行模块化编译,生成对应的编译jar和运行jar。
本发明中,AIDL使用流程如下:
1、创建.aidl文件--此文件定义带有方法签名的编程接口。
2、实现接口--Android SDK工具会基于.aidl文件,使用Java编程语言生成接口。此接口拥有一个名为 Stub 的内部抽象类,用于扩展 Binder类并实现 AIDL 接口中的方法。必须扩展 Stub 类并实现这些方法。
3、向客户端公开接口—实现Service并重写onBind(),从而返回Stub类的实现。
在制作清单文件,即excel文件时,用于代码生成的生成逻辑判断字段的描述具体如图1所示。
AIDL模板中,文件头部分的程序具体如图2所示,方法部分的具体程序如图3所示。
主模板中,copyright说明的具体程序如图4所示,其所有文件都一样,也可以根据需求做内容修改。
主模板中,import部分的说明,具体程序如图5所示,该部分包括有java中通用的package说明,使用android的接口包括AIDL机制所需要引入的类,特别注意我们自己定义的接口或者类,需要使用特别的常量字符串(也可称为占位符)代替,如:root_package_hsae、package_name_hsae、aidl_name_hsae、aidl_callback_name_hsae等,这些占位符会在正在做代码生成时被替换为前置条件中对应字段的内容。
主模板中,类的声明,具体程序如图6所示,该部分描述的是类的声明,类的声明跟前置条件中提到的功能模块、功能子模块等字段有关,一般用于类的注释的生成,另外要注意,需要加上作者、版本号、日期等信息方便后续生成的代码有相应的追溯能力、同样class_name_hsae是占位符,在代码生成时会被替换。
主模板中,成员变量的声明,具体程序如图7所示,该部分描述的所有情况中必须要使用到的成员变量,成员变量的描述如图8所示。
主模板中,通用方法部分的具体程序如图9所示,由于内容较多,图9只展示了一部分的通用方法,如:构造方法、绑定目标服务的方法,这部分的内容一定要是通用的,因为对应对应于每个功能模块或者子模块,都必须要有该类方法,不能将不通用的方法写入其中。
方法模板中的第一个方法模板,其具体程序如图10所示,该方法模板描述的void类型的返回值,方法名称、方法注释、方法参数以及最后的调用;方法模板中的第二个方法模板,其具体程序如图11所示,该方法模板描述的有返回值、方法名称、方法注释、方法参数以及最后的调用的情况;方法模板虽然较多,但是原理都是一样的。
常量模板中的Manifest模板,其具体程序如图12所示;服务常量模板的具体程序如图13所示。
Stub模板的具体程序如图14所示,其中的占位符都会在代码生成时,使用清单中的对应的字段的内容进行替换。
工具制作的具体流程如图15所示,其中模板文件可以内置在工具中(也可以自己做文件选择的方式去选择文件),具体如图16所示。
工具做成后,运行如图17所示,其界面可以根据需要自行调整。
本发明能够大大减少了工程师的代码编写,并保证了统一性和正确性。
现在正在开发的项目中已有1232个接口,使用该工具,运行jar和编译jar在接口清单没有问题的情况下,只需要10到20分钟即可生成代码量为6~7万行的代码的编译jar和运行jar,大大提升效率,并且没有代码逻辑错误,部分文件夹、aidl以及java文件如图18所示;生成的文件数量为950个,具体如图19所示。
本发明制作接口清单,运行代码工具,生成代码,编写Android.mk或者Android.bp,通过Android源码环境编译得到编译jar和运行jar;能够制作各种功能的模板,模板可以重复使用,要做到抽象、通用。
本发明不局限于上述实施例,在本公开的技术方案的基础上,本领域的技术人员根据所公开的技术内容,不需要创造性的劳动就可以对其中的一些技术特征作出一些替换和变形,这些替换和变形均在本发明的保护范围内。
Claims (10)
1.一种用于Android系统的代码生成方法,其特征在于:包括以下步骤,
步骤1,清单与代码模板制作;
步骤2,工具制作;
步骤3,工具使用代码模板生成对应的代码。
2.根据权利要求1所述的一种用于Android系统的代码生成方法,其特征在于:步骤1中清单制作的具体内容如下,
明确需要进行代码生成的内容,从代码的结构来分析,包括包体、类体、方法体的内容,进行excel接口清单文件的设计,清单文件中的字段根据实际需要进行动态调整;对于用于代码生成的生成逻辑判断的字段,要进行对应的描述。
3.根据权利要求2所述的一种用于Android系统的代码生成方法,其特征在于:步骤1中制作代码模板的具体内容如下,
将不变的内容和变化的内容先做分离,不变的内容可以直接按照代码的方式写入到模板中;变化的内容再进行抽象,变化的内容使用占位符表示,与共通的内容写入模板;包括如下必要模板,
AIDL模板,用于AIDL文件的生成;
主模板,用于主体的代码生成:服务连接、服务重连、事件处理、copyright、import部分、成员变量、通用方法;
方法模板,用于方法的代码生成;
常量模板:用于各个常量的代码生成;
Stub模板,用于AIDL机制的服务代理的代码生成。
4.根据权利要求3所述的一种用于Android系统的代码生成方法,其特征在于:AIDL模板包括以下内容,
1、生成的文件是以.aidl为后缀;
2、模板内容分2个部分,文件头部分和方法部分。
5.根据权利要求4所述的一种用于Android系统的代码生成方法,其特征在于:主模板包括以下内容,
1、copyright说明
2、import部分的说明;
3、类的声明;
4、成员变量的声明;
5、通用方法部分。
6.根据权利要求5所述的一种用于Android系统的代码生成方法,其特征在于:方法模板包括以下内容,
方法模板描述的是具体清单文件中的接口:
1、第一个方法模板:该方法模板描述的void类型的返回值,方法名称、方法注释、方法参数以及最后的调用;
2、第二个方法模板,描述的有返回值、方法名称、方法注释、方法参数以及最后的调用的情况。
7.根据权利要求6所述的一种用于Android系统的代码生成方法,其特征在于:常量模板包括以下内容,
1、Manifest模板,基于Android的安全机制,需要在AndroidManifest.xml中声明相关的权限;
2、服务常量模板:包括有ACTION、PACKAGE_NAME、CLASS_NAME这3个常量是关联到清单文件中对应的字段的。
8.根据权利要求7所述的一种用于Android系统的代码生成方法,其特征在于:Stub模板的占位符都会在代码生成时,使用清单中的对应的字段的内容进行替换。
9.根据权利要求8所述的一种用于Android系统的代码生成方法,其特征在于:步骤2的具体内容如下,
步骤2.1,导入excel接口清单文件;
步骤2.2,设置aidl和代码生成的目录;
步骤2.3,根据字段生成对应的文件夹;
步骤2.4,根据模板生成对应的类文件;
步骤2.5,在生成的类文件中根据方法或者函数模板生成对应的接口方法。
10.根据权利要求9所述的一种用于Android系统的代码生成方法,其特征在于:步骤3的具体内容如下,
步骤3.1,工具首先读取内置的模板文件,即后缀名为.hsaetemplate的文件,在运行界面中点击“浏览”用来选择清单文件,“代码目录”用来选择代码生成的目录,最后点击生成,完成代码生成动作;
步骤3.2,生成编译jar和运行jar:使用项目的Android系统源码环境,编写Android.mk或者Android.bp文件,进行模块化编译,生成对应的编译jar和运行jar。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210840434.7A CN115098076A (zh) | 2022-07-18 | 2022-07-18 | 一种用于Android系统的代码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210840434.7A CN115098076A (zh) | 2022-07-18 | 2022-07-18 | 一种用于Android系统的代码生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115098076A true CN115098076A (zh) | 2022-09-23 |
Family
ID=83298676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210840434.7A Pending CN115098076A (zh) | 2022-07-18 | 2022-07-18 | 一种用于Android系统的代码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115098076A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116737174A (zh) * | 2023-08-15 | 2023-09-12 | 中国兵器装备集团兵器装备研究所 | 一种基于开源鸿蒙系统的子系统自动生成工具及方法 |
-
2022
- 2022-07-18 CN CN202210840434.7A patent/CN115098076A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116737174A (zh) * | 2023-08-15 | 2023-09-12 | 中国兵器装备集团兵器装备研究所 | 一种基于开源鸿蒙系统的子系统自动生成工具及方法 |
CN116737174B (zh) * | 2023-08-15 | 2023-11-14 | 中国兵器装备集团兵器装备研究所 | 一种基于开源鸿蒙系统的子系统自动生成工具及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7032210B2 (en) | Method and system for generating program source code of a computer application from an information model | |
Steel et al. | On model typing | |
Aßmann et al. | Invasive software composition | |
Efftinge et al. | oAW xText: A framework for textual DSLs | |
Heidenreich et al. | Closing the gap between modelling and java | |
US20050065953A1 (en) | System and method for changing defined elements in a previously compiled program using a description file | |
CN113050954A (zh) | 在动态链接的运行时环境中的模块化共同版本管理 | |
CN110262783B (zh) | 一种接口生成方法、装置及终端设备 | |
CN111309292B (zh) | 一种基于MATLAB/Simulink的全模型可执行程序构建方法 | |
US6675377B1 (en) | Program conversion apparatus | |
CN115098076A (zh) | 一种用于Android系统的代码生成方法 | |
JP2005141380A (ja) | テンプレートコンパイル方法 | |
Haase et al. | Introduction to openArchitectureWare 4.1. 2 | |
EP1452962B1 (en) | System and method for defining and using subclasses declaratively within markup | |
Moggi et al. | Monadic encapsulation of effects: A revised approach (extended version) | |
Clavreul et al. | Integrating legacy systems with mde | |
Waddington et al. | High-fidelity C/C++ code transformation | |
Tanaka et al. | Safe low-level code generation in Coq using monomorphization and monadification | |
Wenger et al. | Transformation of IEC 61131-3 to IEC 61499 based on a model driven development approach | |
CN113805890A (zh) | 小程序跨应用迁移方法、设备、终端、系统及存储介质 | |
JP3562435B2 (ja) | コンポーネントの自動生成装置 | |
EP4145761A1 (en) | A system and a method for automatic generation of smart contracts across blockchain platforms | |
CN115421782A (zh) | 应用于iOS端的SDK兼容方法、存储装置及智能终端 | |
Butkevich et al. | Compiler and tool support for debugging object protocols | |
CN114706592B (zh) | 面向对象及面向过程语言的Modelica仿真组件生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |