CN115543440A - 安卓项目迁移到类安卓***的方法、电子设备和存储介质 - Google Patents
安卓项目迁移到类安卓***的方法、电子设备和存储介质 Download PDFInfo
- Publication number
- CN115543440A CN115543440A CN202110735657.2A CN202110735657A CN115543440A CN 115543440 A CN115543440 A CN 115543440A CN 202110735657 A CN202110735657 A CN 202110735657A CN 115543440 A CN115543440 A CN 115543440A
- Authority
- CN
- China
- Prior art keywords
- android
- migrating
- file
- migration
- project
- 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
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000013508 migration Methods 0.000 claims abstract description 91
- 230000005012 migration Effects 0.000 claims abstract description 91
- 230000008676 import Effects 0.000 claims description 23
- 230000003068 static effect Effects 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 10
- 239000000126 substance Substances 0.000 claims 1
- 230000006870 function Effects 0.000 abstract description 25
- 238000011161 development Methods 0.000 abstract description 21
- 230000008569 process Effects 0.000 abstract description 19
- 230000002829 reductive effect Effects 0.000 abstract description 14
- 238000010586 diagram Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- 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/36—Software reuse
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开实施例公开一种安卓项目迁移到类安卓***的方法、电子设备和存储介质,安卓项目迁移到类安卓***的方法包括:确定安卓***与类安卓***之间的差异项目;确定将差异项目从安卓***迁移到类安卓***的迁移方式;根据迁移方式将差异项目从安卓***迁移到类安卓***,可以使安卓项目在迁移后能够在类安卓***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到类安卓***的方式也较为简单,开发效率较高。
Description
技术领域
本公开涉及计算机技术领域,具体涉及安卓项目迁移到类安卓***的方法、电子设备和存储介质。
背景技术
随着移动设备和移动设备操作***的发展,人们在采用不同操作***时,会需要将一种***工程迁移到另一种***工程。例如,诸如鸿蒙***之类的类安卓***的问世,使得安卓(Android)***的项目迁移到鸿蒙***的需要变得较为迫切。但是,当前将安卓***的项目迁移到类安卓***的方式较为复杂,开发效率较低,安卓***的代码的复用率不高。因此,如何高效便捷的完成将安卓***的项目迁移到类安卓***是越来越急迫需要解决的问题。
发明内容
为了解决相关技术中的问题,本公开实施例提供安卓项目迁移到类安卓***的方法、电子设备、可读存储介质和计算机程序产品。
第一方面,本公开实施例中提供了一种安卓项目迁移到类安卓***的方法,包括:
确定安卓***与类安卓***之间的差异项目;
确定将差异项目从安卓***迁移到类安卓***的迁移方式;
根据迁移方式将差异项目从安卓***迁移到类安卓***。
结合第一方面,本公开在第一方面的第一种实现方式中,类安卓***是鸿蒙***,并且差异项目包括build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分。
结合第一方面的第一种实现方式,本公开在第一方面的第二种实现方式中,将build.gradle文件从安卓***迁移到类安卓***的迁移方式为:通过第一预设脚本修改build.gradle文件的import,以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式。
结合第一方面的第一种实现方式,本公开在第一方面的第三种实现方式中,将AndroidMainfest.xml文件从安卓***迁移到类安卓***的迁移方式为:通过第二预设脚本将AndroidMainfest.xml文件转换为json文件。
结合第一方面的第一种实现方式,本公开在第一方面的第四种实现方式中,将Asset文件夹从安卓***迁移到类安卓***的迁移方式为:通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并且在鸿蒙***中设置所复制的文件的存储位置和文件名称。
结合第一方面的第一种实现方式,本公开在第一方面的第五种实现方式中,将xml文件从安卓***迁移到类安卓***的迁移方式为:
读取xml文件,解析控件名以及对应的属性;
通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性;
将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性。
结合第一方面的第一种实现方式,本公开在第一方面的第六种实现方式中,将代码从安卓***迁移到类安卓***的迁移方式为:
读取java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;
获取java文件所有使用到Android的包;
根据获取到的包,解析出引用的Android类;
通过类查找对应的对象、static参数和static接口;
根据查找到的对象查找接口和参数;
创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写;
修改此java文件中的包,指向创建的鸿蒙类的包名;
修改此java文件中的类,指向创建的鸿蒙类。
第二方面,本公开实施例中提供了一种电子设备,包括存储器和处理器;其中,
存储器用于存储一条或多条计算机指令,其中,一条或多条计算机指令被处理器执行以实现如第一方面、第一方面的第一种实现方式到第六种实现方式任一项的方法。
第三方面,本公开实施例中提供了一种可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如第一方面、第一方面的第一种实现方式到第六种实现方式任一项的方法。
第四方面,本公开实施例中提供了一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现如第一方面、第一方面的第一种实现方式到第六种实现方式任一项的方法。
本公开实施例提供的技术方案可以包括以下有益效果:
根据本公开实施例提供的技术方案,通过确定安卓***与类安卓***之间的差异项目,确定将差异项目从安卓***迁移到类安卓***的迁移方式,根据迁移方式将差异项目从安卓***迁移到类安卓***,使安卓项目在迁移后能够在类安卓***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到类安卓***的方式也较为简单,开发效率较高。
根据本公开实施例提供的技术方案,通过类安卓***是鸿蒙***,并且差异项目包括build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分。当未对安卓项目中build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分进行迁移时,若安卓项目直接在鸿蒙***中运行,则会出现运行错误或所运行的项目无法实现其设计目的。通过确定build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分为差异项目,并确定将差异项目从安卓***迁移到鸿蒙***的迁移方式,根据迁移方式将差异项目从安卓***迁移到鸿蒙***,可以使安卓项目在迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
根据本公开实施例提供的技术方案,通过将build.gradle文件从安卓***迁移到类安卓***的迁移方式为:通过第一预设脚本修改build.gradle文件的import,以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式,可以使build.gradle文件作为gradle的配置文件能够在鸿蒙***下被正常使用,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
根据本公开实施例提供的技术方案,通过将AndroidMainfest.xml文件从安卓***迁移到类安卓***的迁移方式为:通过第二预设脚本将AndroidMainfest.xml文件转换为json文件,可以使转换后的json文件能够作为迁移后项目的入口文件被正常使用,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
根据本公开实施例提供的技术方案,通过将Asset文件夹从安卓***迁移到类安卓***的迁移方式为:通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并且在鸿蒙***中设置所复制的文件的存储位置和文件名称,可以使从鸿蒙***中的对应文件夹能够读取原先储存在安卓***的Asset文件夹中的文件,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
根据本公开实施例提供的技术方案,通过将xml文件从安卓***迁移到类安卓***的迁移方式为:读取xml文件,解析控件名以及对应的属性;通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性;将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性,可以使迁移后的xml文件中的控件被鸿蒙***正常调用,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
根据本公开实施例提供的技术方案,通过将代码从安卓***迁移到类安卓***的迁移方式为:读取java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;获取java文件所有使用到Android的包;根据获取到的包,解析出引用的Android类;通过类查找对应的对象、static参数和static接口;根据查找到的对象查找接口和参数;创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写;修改此java文件中的包,指向创建的鸿蒙类的包名;修改此java文件中的类,指向创建的鸿蒙类,可以使迁移后的代码能够正常调用鸿蒙***中的类,并且确保被调用的类的功能与迁移前的代码所调用的类相同,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
图1示出的根据本公开一实施方式的安卓项目迁移到类安卓***的方法应用场景的示意图;
图2示出根据本公开一实施方式的安卓项目迁移到类安卓***的方法的流程图;
图3示出根据本公开一实施方式的将代码从安卓***迁移到类安卓***的迁移方法的流程图;
图4示出根据本公开一实施方式的电子设备的结构框图;
图5是适于用来实现根据本公开各实施方式的方法的计算机***的结构示意图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的标签、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他标签、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的标签可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
在考虑本公开实施方式的应用场景时,发明人以安卓项目的迁移场景进行研究。发明人研究了以下将安卓项目迁移到类安卓***的相关技术方案。
在一个方案中,可以将安卓(Android)项目的代码按照逻辑划分区分为不同的功能模块,将不同功能模块的代码分别进行手动修改,使修改后的代码能够在类安卓***中运行,并实现该功能模块对应的逻辑,之后重新将切换后的代码编译,以获得迁移后的项目。
上述方案需要对安卓项目中每个功能模块的代码进行手动修改,安卓***的代码的复用率不高,该方案中需要手动修改的代码数量较大,因此该方案中对安卓项目进行迁移的方式较为复杂,开发效率较低。
为了解决上述问题,本公开提出安卓项目迁移到类安卓***的方法和电子设备、可读存储介质和计算机程序产品。
本公开实施例的方案可以解决相关技术中将安卓项目迁移到类安卓***的方式较为复杂,开发效率较低,安卓***的代码的复用率不高的缺点。通过确定安卓***与类安卓***之间的差异项目,确定将差异项目从安卓***迁移到类安卓***的迁移方式,根据迁移方式将差异项目从安卓***迁移到类安卓***,使安卓项目在迁移后能够在类安卓***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到类安卓***的方式也较为简单,开发效率较高。
图1示出了根据本公开实施例的应用场景的示意图。可以理解,图1所示应用场景仅为了说明本公开的概念和原理,而并非意味着本公开仅适用于这样的应用场景。
如图1所示,在本公开的一个实施例中,需要迁移的安卓项目可以是储存在服务器101上的安卓项目或服务器101从终端设备102获取的安卓项目,安卓项目迁移到类安卓***的方法可以由服务器101来执行。需要迁移的安卓项目也可以是储存在终端设备102上的安卓项目或是终端设备102从服务器101处获取的安卓项目,安卓项目迁移到类安卓***的方法可以由终端设备102来执行。其中,上述终端设备102可以是手机、计算机、平板电脑等。其中,终端设备102通过通信网络与服务器101进行通信。终端设备102可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器101可以用独立的服务器来实现。
图2示出根据本公开一实施方式的安卓项目迁移到类安卓***的方法的流程图。如图2所示,安卓项目迁移到类安卓***的方法包括步骤S101、S102、S103。
在步骤S101中,确定安卓***与类安卓***之间的差异项目。
在步骤S102中,确定将差异项目从安卓***迁移到类安卓***的迁移方式。
在步骤S103中,根据迁移方式将差异项目从安卓***迁移到类安卓***。
其中,若安卓项目中存在所述差异项目,当将安卓项目迁移到类安卓***时未以所述迁移方式迁移该差异项目,则该迁移后的项目在类安卓***运行时会出现错误,或该迁移后的项目无法实现事先设计的功能。
根据本公开实施例提供的技术方案,通过确定安卓***与类安卓***之间的差异项目,确定将差异项目从安卓***迁移到类安卓***的迁移方式,根据迁移方式将差异项目从安卓***迁移到类安卓***,使安卓项目在迁移后能够在类安卓***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到类安卓***的方式也较为简单,开发效率较高。
在本公开的一个实施例中,类安卓***是鸿蒙***,并且差异项目包括build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分。
其中,gradle是安卓***中的构建工具包,它管理依赖项并允许开发者自定义构建逻辑,build.gradle是gradle的配置文件,build.gradle提供了对一个项目的基本配置,例如声明仓库源,gradle的版本号说明等。
AndroidMainfest.xml是安卓应用的入口文件,它描述了安卓应用的各个组件(例如activities,services等)、安卓应用的组件的实现类,能被安卓应用的组件处理的数据、安卓应用的组件的启动条件等。
Asset文件夹用于存放安卓应用开发过程中开发者编写的静态资源(例如image文件,css文件,js文件等)。
可扩展标记语言(Extensible Markup Language,xml)文件在安卓***中被用来传输和储存数据,例如,arrays.xml文件用于定义数组,colors.xml文件用于定义颜色,dimens.xml文件用于定义尺寸,rawables.xml文件用于定义画布,strings.xml文件用于定义字符串等。
根据本公开实施例提供的技术方案,类安卓***是鸿蒙***,并且差异项目包括build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分。当未对安卓项目中build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分进行迁移时,若安卓项目直接在鸿蒙***中运行,则会出现运行错误或所运行的项目无法实现其设计目的。通过确定build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分为差异项目,并确定将差异项目从安卓***迁移到鸿蒙***的迁移方式,根据迁移方式将差异项目从安卓***迁移到鸿蒙***,可以使安卓项目在迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
在本公开的一个实施例中,将build.gradle文件从安卓***迁移到类安卓***的迁移方式为:通过第一预设脚本修改build.gradle文件的import,以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式。
示例性的,在安卓***里,build.gradle文件中,引入(import)可以使用
apply plugin:'com.android.application'
在将build.gradle文件从安卓***迁移到类安卓***时,通过第一预设脚本修改build.gradle文件的import,将build.gradle文件中的
apply plugin:'com.android.application'
改为
apply plugin:'com.huawei.harmony.hap'
以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式。
根据本公开实施例提供的技术方案,通过将build.gradle文件从安卓***迁移到类安卓***的迁移方式为:通过第一预设脚本修改build.gradle文件的import,以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式,可以使build.gradle文件作为gradle的配置文件能够在鸿蒙***下被正常使用,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
在本公开的一个实施例中,将AndroidMainfest.xml文件从安卓***迁移到类安卓***的迁移方式为:通过第二预设脚本将AndroidMainfest.xml文件转换为json文件。
其中,JavaScript对象简谱(JavaScript Object Notation,json)文件是一种轻量换格式,在安卓***中,json文件可以用于存储和表示数据。
根据本公开实施例提供的技术方案,通过将AndroidMainfest.xml文件从安卓***迁移到类安卓***的迁移方式为:通过第二预设脚本将AndroidMainfest.xml文件转换为json文件,可以使转换后的json文件能够作为迁移后项目的入口文件被正常使用,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
在本公开的一个实施例中,将Asset文件夹从安卓***迁移到类安卓***的迁移方式为:通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并且在鸿蒙***中设置所复制的文件的存储位置和文件名称。
示例性的,安卓***中,Asset文件夹的存放地址为/app/src/main/assets,通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并确保鸿蒙***中的对应文件夹的地址为/app/src/resources/rawfile。
根据本公开实施例提供的技术方案,通过将Asset文件夹从安卓***迁移到类安卓***的迁移方式为:通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并且在鸿蒙***中设置所复制的文件的存储位置和文件名称,可以使从鸿蒙***中的对应文件夹能够读取原先储存在安卓***的Asset文件夹中的文件,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
在部分情况下,安卓***的xml文件中定义了安卓项目必备的许多控件,例如文本框(TextView)控件、日期和时间(DatePicker、TimePicker)控件、按钮(Button)控件、菜单(Menu,SubMenu,MenuItem)控件、对话框(Dialog)控件、进度条(ProgressBar)控件等。若未将xml文件从安卓***迁移到鸿蒙***,则安卓项目直接在鸿蒙***中运行时无法调用该xml文件中的控件,导致该安卓项目出现运行错误或该安卓项目无法实现其设计目的。在本公开的一个实施例中,也可以采用与在此描述的一般的xml文件迁移方式不同的方式对特定的xml文件进行迁移。
在本公开的一个实施例中,将xml文件从安卓***迁移到类安卓***的迁移方式为:读取xml文件,解析控件名以及对应的属性;通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性;将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性。
例如,以xml文件包括文本控件TextView控件为例进行说明,在安卓***中,TextView控件对应的代码为:
当将xml文件从安卓***迁移到鸿蒙***时,读取xml文件,解析该xml文件的控件名以及对应的属性。根据解析结果确定该xml文件的控件名为:
android:id="@+id/address"
对应的属性为:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="find_device_ticker"
通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性,根据查找结果确定鸿蒙***对应的控件名为:
harmoonyos:id="$+id/address"
根据查找结果确定对应的属性为:
harmoonyos:width="wrap_content"
harmoonyos:height="wrap_content"
harmoonyos:text="find_device_ticker"
将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性,得到迁移到鸿蒙***的xml文件,该迁移到鸿蒙***的xml文件中文本控件TextView控件对应的代码为
根据本公开实施例提供的技术方案,通过将xml文件从安卓***迁移到类安卓***的迁移方式为:读取xml文件,解析控件名以及对应的属性;通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性;将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性,可以使迁移后的xml文件中的控件被鸿蒙***正常调用,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
在本公开的一个实施例中,将代码从安卓***迁移到类安卓***的迁移方式为:读取java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;获取java文件所有使用到Android的包;根据获取到的包,解析出引用的Android类;通过类查找对应的对象、static参数和static接口;根据查找到的对象查找接口和参数;创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写;修改此java文件中的包,指向创建的鸿蒙类的包名;修改此java文件中的类,指向创建的鸿蒙类。
以下参照图3描述根据本公开一实施方式的将代码从安卓***迁移到类安卓***的迁移方法。图3示出根据本公开一实施方式的将代码从安卓***迁移到类安卓***的迁移方法的流程图。如图3所示,将代码从安卓***迁移到类安卓***的迁移方法包括步骤S201-S211。
在步骤S201中,读取java文件;
在步骤S202中,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;
在步骤S203中,获取java文件所有使用到Android的包。
在步骤S204中,根据获取到的包,解析出引用的Android类。
在步骤S205中,通过类查找对应的对象。
在步骤S206中,根据查找到的对象查找static参数。
在步骤S207中,根据查找到的对象查找static接口。
在步骤S208中,根据查找到的对象查找接口。
在步骤S209中,根据查找到的对象查找参数。
在步骤S210中,创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写。
其中,所述鸿蒙类指的是可以在鸿蒙***中被正常调用以实现对应功能的类。
在步骤S211中,修改此java文件中的包,指向创建的鸿蒙类的包名。
其中,在鸿蒙***中,可以根据该java文件中的包名,查找容纳所述创建的鸿蒙类的包,以便于访问该包中的所述创建的鸿蒙类。
在步骤S212中,修改此java文件中的类,指向创建的鸿蒙类。
其中,在鸿蒙***中,可以根据该java文件中的类,调用所述创建的鸿蒙类,以实现所述创建的鸿蒙类所对应的功能。
例如,以安卓***中的java文件包括如下代码为例进行说明:
import android.content.Context;
import android.util.Log;
import java.io.DataOutputStream;
通过读取此java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;获取java文件所有使用到Android的包,其中由于在上述第一行代码与第二行代码中,import之后的字符串包含“android.”,因此可以过滤出两个android的包,分别为“android.content.Context”和“android.util.Log”。根据获取到的两个android的包“android.content.Context”和“android.util.Log”,解析出引用的Android类,其中“android.content.Context”所引用的类的类名为“Context”,“android.util.Log”所引用的类的类名为“Log”。通过类名分别为“Context”和“Log”的类,查找对应的对象、static参数和static接口。其中,通过查找包含“Context”的代码,可以过滤出类名为“Context”的类被使用的地方,例如:
Context context=null;
之后根据java代码对象合理规则,过滤出类名分为“Context”的类对应的对象为“context”,以及与类名分为“Context”的类对应的static参数和static接口。类似的,通过查找包含“Log”的代码,可以过滤出类名为“Log”的类被使用的地方,例如:
Log.d(Global.TAG,"getJson IOException="+jsonObject.toString());
之后根据规则“Log.**(”找到方法“d”。根据查找到的对象“context”查找到:
context.unregisterReceiver(mBroadcastReceiver);
再通过对象“context”过滤出unregisterReceiver这个接口。创建新的鸿蒙类,继承解析出的引用的Android类名分别为“Context”和“Log”的类,将查找到的接口和参数在创建的鸿蒙类中重写。修改此java文件中的包,指向创建的鸿蒙类的包名,将java文件中的
import android.content.Context;
修改为
import com.autonavi.amapauto.customContext;
修改此java文件中的类,将Context context=null替换成customContextcontext=null,使其指向创建的鸿蒙类。
根据本公开实施例提供的技术方案,通过将代码从安卓***迁移到类安卓***的迁移方式为:读取java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;获取java文件所有使用到Android的包;根据获取到的包,解析出引用的Android类;通过类查找对应的对象、static参数和static接口;根据查找到的对象查找接口和参数;创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写;修改此java文件中的包,指向创建的鸿蒙类的包名;修改此java文件中的类,指向创建的鸿蒙类,可以使迁移后的代码能够正常调用鸿蒙***中的类,并且确保被调用的类的功能与迁移前的代码所调用的类相同,使安卓项目进行迁移后能够在鸿蒙***中正常运行并实现其原先设计的功能,从而尽量减少了迁移过程中需要处理的代码数量,使代码的复用率较高,将安卓项目迁移到鸿蒙***的方式也较为简单,开发效率较高。
在本公开的一个实施例中,可以将针对不同的安卓项目的各种迁移方式集成起来,实现一键快速将安卓项目迁移到类安卓项目上,节省在迁移过程中大量的人力资源的投入。而且,根据本公开实施例的的方案,可以最大程度地保留原有安卓工程的java代码,通过组件化方式将Android相关接口剥离出来独立成组件。能够最大程度的保留原有的架构。
图4示出根据本公开一实施方式的电子设备的结构框图。
本公开实施方式还提供了一种电子设备,如图4所示,电子设备200包括至少一个处理器201;以及与至少一个处理器201通信连接的存储器202;其中,存储器202存储有可被至少一个处理器201执行的指令,指令被至少一个处理器201执行以实现以下步骤:
确定安卓***与类安卓***之间的差异项目;
确定将差异项目从安卓***迁移到类安卓***的迁移方式;
根据迁移方式将差异项目从安卓***迁移到类安卓***。
在本公开的一个实施例中,类安卓***是鸿蒙***,并且差异项目包括build.gradle文件、AndroidMainfest.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分。
在本公开的一个实施例中,将build.gradle文件从安卓***迁移到类安卓***的迁移方式为:通过第一预设脚本修改build.gradle文件的import,以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式。
在本公开的一个实施例中,将AndroidMainfest.xml文件从安卓***迁移到类安卓***的迁移方式为:通过第二预设脚本将AndroidMainfest.xml文件转换为json文件。
在本公开的一个实施例中,将Asset文件夹从安卓***迁移到类安卓***的迁移方式为:通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并且在鸿蒙***中设置所复制的文件的存储位置和文件名称。
在本公开的一个实施例中,将xml文件从安卓***迁移到类安卓***的迁移方式为:
读取xml文件,解析控件名以及对应的属性;
通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性;
将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性。
在本公开的一个实施例中,将代码从安卓***迁移到类安卓***的迁移方式为:
读取java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;
获取java文件所有使用到Android的包;
根据获取到的包,解析出引用的Android类;
通过类查找对应的对象、static参数和static接口;
根据查找到的对象查找接口和参数;
创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写;
修改此java文件中的包,指向创建的鸿蒙类的包名;
修改此java文件中的类,指向创建的鸿蒙类。
图5是适于用来实现根据本公开各实施方式的方法的计算机***的结构示意图。如图5所示,计算机***300包括处理单元301,其可以根据存储在只读存储器(ROM)302中的程序或者从存储部分308加载到随机访问存储器(RAM)303中的程序而执行上述附图所示的实施方式中的各种处理。在RAM303中,还存储有***300操作所需的各种程序和数据。CPU301、ROM302以及RAM303通过总线304彼此相连。输入/输出(I/O)接口305也连接至总线304。
以下部件连接至I/O接口305:包括键盘、鼠标等的输入部分306;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分307;包括硬盘等的存储部分308;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分309。通信部分309经由诸如因特网的网络执行通信处理。驱动器310也根据需要连接至I/O接口305。可拆卸介质311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器310上,以便于从其上读出的计算机程序根据需要被安装入存储部分308。其中,所述处理单元301可实现为CPU、GPU、TPU、FPGA、NPU等处理单元。
特别地,根据本公开的实施方式,上文参考附图描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行附图中的方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分309从网络上被下载和安装,和/或从可拆卸介质311被安装。例如,本公开的实施方式包括一种可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现用于执行附图中的方法的程序代码。
附图中的流程图和框图,图示了按照本公开各种实施方式的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种安卓项目迁移到类安卓***的方法,包括:
确定安卓***与类安卓***之间的差异项目;
确定将所述差异项目从安卓***迁移到所述类安卓***的迁移方式;
根据所述迁移方式将所述差异项目从安卓***迁移到所述类安卓***。
2.根据权利要求1所述的方法,所述类安卓***是鸿蒙***,并且所述差异项目包括build.gradle文件、AndroidMainfes、t.xml文件、Asset文件夹、资源、xml文件、代码中的至少一部分。
3.根据权利要求2所述的方法,将build.gradle文件从安卓***迁移到所述类安卓***的迁移方式为:通过第一预设脚本修改build.gradle文件的import,以去掉安卓***的特有属性,从而将build.gradle文件修改成鸿蒙***的格式。
4.根据权利要求2所述的方法,将AndroidMainfest.xml文件从安卓***迁移到所述类安卓***的迁移方式为:通过第二预设脚本将AndroidMainfest.xml文件转换为json文件。
5.根据权利要求2所述的方法,将Asset文件夹从安卓***迁移到所述类安卓***的迁移方式为:通过第三预设脚本将Asset文件夹中的文件复制到鸿蒙***中的对应文件夹中,并且在鸿蒙***中设置所复制的文件的存储位置和文件名称。
6.根据权利要求2所述的方法,将xml文件从安卓***迁移到所述类安卓***的迁移方式为:
读取xml文件,解析控件名以及对应的属性;
通过控件名查找鸿蒙***对应的控件名,并且查找对应的属性;
将鸿蒙***中的对应的控件名和对应的属性替换为解析出的控件名以及对应的属性。
7.根据权利要求2所述的方法,将代码从安卓***迁移到所述类安卓***的迁移方式为:
读取java文件,根据关键字import,检索出java文件所有引入的包,包名加上前缀android.;
获取java文件所有使用到Android的包;
根据获取到的包,解析出引用的Android类;
通过类查找对应的对象、static参数和static接口;
根据查找到的对象查找接口和参数;
创建新的鸿蒙类,继承解析出的引用的Android类,将查找到的接口和参数在创建的鸿蒙类中重写;
修改此java文件中的包,指向创建的鸿蒙类的包名;
修改此java文件中的类,指向创建的鸿蒙类。
8.一种电子设备,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如权利要求1-7任一项所述的方法。
9.一种可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如权利要求1-7任一项所述的方法。
10.一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110735657.2A CN115543440A (zh) | 2021-06-30 | 2021-06-30 | 安卓项目迁移到类安卓***的方法、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110735657.2A CN115543440A (zh) | 2021-06-30 | 2021-06-30 | 安卓项目迁移到类安卓***的方法、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115543440A true CN115543440A (zh) | 2022-12-30 |
Family
ID=84716961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110735657.2A Pending CN115543440A (zh) | 2021-06-30 | 2021-06-30 | 安卓项目迁移到类安卓***的方法、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115543440A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483328A (zh) * | 2023-06-19 | 2023-07-25 | 广州信位通讯科技有限公司 | 在ThreadX嵌入式软件平台上运行鸿蒙APP的***及方法 |
CN117785281A (zh) * | 2024-02-28 | 2024-03-29 | 南方电网调峰调频发电有限公司 | 一种基于操作***移植nfc功能的方法 |
-
2021
- 2021-06-30 CN CN202110735657.2A patent/CN115543440A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483328A (zh) * | 2023-06-19 | 2023-07-25 | 广州信位通讯科技有限公司 | 在ThreadX嵌入式软件平台上运行鸿蒙APP的***及方法 |
CN116483328B (zh) * | 2023-06-19 | 2023-09-12 | 广州信位通讯科技有限公司 | 在ThreadX嵌入式软件平台上运行鸿蒙APP的***及方法 |
CN117785281A (zh) * | 2024-02-28 | 2024-03-29 | 南方电网调峰调频发电有限公司 | 一种基于操作***移植nfc功能的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105718289B (zh) | 一种组件关系建立方法及其设备 | |
CN107402746B (zh) | 一种自动生成代码文件的方法及装置 | |
CN111381852A (zh) | 基于Flutter的应用动态更新方法、装置、存储介质及电子设备 | |
JP2021111368A (ja) | Apiベースのソフトウェア開発プラットフォーム | |
CN112817657B (zh) | 一种应用程序启动项加载方法、装置、***及存储介质 | |
CN113126990B (zh) | 一种页面开发方法、装置、设备及存储介质 | |
CN115543440A (zh) | 安卓项目迁移到类安卓***的方法、电子设备和存储介质 | |
CN113031946A (zh) | 一种渲染页面组件的方法和装置 | |
CN111694613A (zh) | 应用程序模块间的解耦方法、电子装置及存储介质 | |
CN114996619A (zh) | 一种页面显示的方法、装置、计算机设备及存储介质 | |
CN112835568A (zh) | 一种项目构建方法和装置 | |
CN110489162B (zh) | 安装包so文件精简方法、装置、介质和设备 | |
CN113760276A (zh) | 一种生成页面代码的方法和装置 | |
CN116028028A (zh) | 请求函数生成方法、装置、设备及存储介质 | |
US11604662B2 (en) | System and method for accelerating modernization of user interfaces in a computing environment | |
CN112328241B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN111158777B (zh) | 组件调用方法、装置及计算机可读存储介质 | |
CN113296752A (zh) | 生成api文档的方法、***、设备及存储介质 | |
CN112926008A (zh) | 生成表单页面的方法、装置、电子设备和存储介质 | |
CN115809056B (zh) | 组件复用实现方法、装置和终端设备、可读存储介质 | |
CN110599112B (zh) | 一种网络页面开发、维护方法和装置 | |
CN114115855A (zh) | 代码复用方法及装置、计算机可读存储介质、电子设备 | |
CN111273913B (zh) | 一种输出规范表示的应用程序接口数据的方法及装置 | |
CN116431137A (zh) | 跨开发框架的组件转换方法、处理***和组件转换装置 | |
CN113761871A (zh) | 富文本渲染方法、装置、电子设备以及存储介质 |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20240301 Address after: # 03-06, Lai Zan Da Building 1, 51 Belarusian Road, Singapore Applicant after: Alibaba Innovation Co. Country or region after: Singapore Address before: Room 01, 45th Floor, AXA Building, 8 Shanton Road, Singapore Applicant before: Alibaba Singapore Holdings Ltd. Country or region before: Singapore |