CN106648638B - 一种基于python的R.java文件的优化方法及优化系统 - Google Patents

一种基于python的R.java文件的优化方法及优化系统 Download PDF

Info

Publication number
CN106648638B
CN106648638B CN201611129939.3A CN201611129939A CN106648638B CN 106648638 B CN106648638 B CN 106648638B CN 201611129939 A CN201611129939 A CN 201611129939A CN 106648638 B CN106648638 B CN 106648638B
Authority
CN
China
Prior art keywords
java
file
resource
python
code source
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.)
Active
Application number
CN201611129939.3A
Other languages
English (en)
Other versions
CN106648638A (zh
Inventor
刘一琛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Magic Crystal Intelligent Technology Co.,Ltd.
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201611129939.3A priority Critical patent/CN106648638B/zh
Publication of CN106648638A publication Critical patent/CN106648638A/zh
Application granted granted Critical
Publication of CN106648638B publication Critical patent/CN106648638B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于python的R.java文件的优化方法,涉及计算机文件优化技术领域,包括创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于python字典对象中;创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于路径列表中;遍历路径列表,通过java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;清空R.java文件的内容。本发明还公开了一种基于python的R.java文件的优化系统。

Description

一种基于python的R.java文件的优化方法及优化系统
技术领域
本发明涉及计算机文件优化技术领域,具体涉及一种基于python的R.java文件的优化方法及优化系统。
背景技术
在安卓开发过程中,随着系统版本的更新与迭代,应用程序的体积会越来越大,出于用户流量费用的考虑,优化应用程序的安装包大小,从而减少用户的流量成为一项亟需解决的技术问题。
目前主流优化应用程序安装包大小的方案有两种,一种是清理无用的so文件。应用程序的安装包中为了兼容性会放入多个处理器架构的so文件,导致应用程序安装包变大,但是其实大多数处理器都只兼容其中一种处理器架构,因而只能使用一种处理器架构的so文件。于是在编译时期将其他处理器的so文件过滤掉,能够减少应用程序安装包的大小。其缺点就是对于没有使用native层接口的应用程序,没有优化的空间。
另外一种方案就是编译混淆,通过混淆器更改文件名为更小的字符。其缺陷是,对于应用中使用了反射相关的类不能进行混淆,不然应用在运行其会找不到该类。
同时,在安卓系统中一个应用的dex文件的支持的方法数的数量有上限,如果超过上限需要将应用拆分成多个dex文件,应用启动时会额外的花时间组合多个dex文件,导致应用的启动变慢。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于python的R.java文件的优化方法及优化系统,优化应用程序安装包大小,减少应用程序的dex文件分包数量。
为达到以上目的,本发明采取的技术方案是:一种基于python的R.java文件的优化方法,所述R.java文件用于存储应用程序中java代码源文件调用资源的资源名称和资源值,该方法包括:
步骤S1,创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于所述python字典对象中;
步骤S2,创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于所述路径列表中;
步骤S3,遍历所述路径列表,通过所述java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;
步骤S4,清空R.java文件的内容。
在上述技术方案的基础上,R.java文件的路径在应用程序的安装包名的直接目录下。
在上述技术方案的基础上,所述资源值为常量或变量值。
在上述技术方案的基础上,步骤S1的具体过程包括:
S101,找到R.java文件的目录;
S102,遍历R.java文件的目录,获得其资源的资源名称;
S103,遍历全部资源,获取其资源值;
S104,将资源名称和资源值存储到所述python字典对象中。
在上述技术方案的基础上,遍历R.java文件的目录,获得其资源的资源名称包括:
通过python的open函数打开R.java文件,然后调用python的readline函数遍历R.java文件的每一行,通过python的find函数找出R.java文件下包含资源值的全部资源,通过python的replace函数获得资源的资源名称。
在上述技术方案的基础上,遍历全部资源,获取其资源值包括:
遍历R.java文件下遍历全部资源,调用python的replace函数获得全部资源里包含的资源值。
在上述技术方案的基础上,步骤S2的具体过程包括:
S201,获取应用程序中所有的java代码源文件的目录,扫描出其下所有的子目录和文件;
S202,判断扫描出的文件中哪些是java代码源文件;
S203,将扫描出的文件中的java代码源文件经过的全部目录拼成该java代码源文件的路径,并将该java代码源文件的路径存到路径列表中。
在上述技术方案的基础上,步骤S3的具体过程包括:
S301,遍历所述路径列表,通过python的open函数打开所述java代码源文件的路径中对应的java代码源文件;
S302,然后在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值;
S303,使用python的replace函数将java代码源文件中的资源名称替换成资源值。
在上述技术方案的基础上,步骤S4的具体过程包括:通过python的open函数打开R.java文件,然后调用python的replace函数将R.java文件中所有内容替换为空。
本发明还公开了一种基于python的R.java文件的优化系统,包括:
资源值获取模块,用于创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于所述python字典对象中;
路径列表模块,用于创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于所述路径列表中;
替换模块,用于遍历所述路径列表,通过所述java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;
清空模块,用于清空R.java文件。
与现有技术相比,本发明的优点在于:
(1)本发明将java代码源文件引用的资源替换成R.java文件中保存的资源名称对应的资源值,从而可以清空R.java文件的内容,实现优化应用程序安装包大小。
(2)由于清空了R.java文件的内容,有效减少了dex文件的成员数量,从而减少应用程序的dex文件分包数量。
附图说明
图1为本发明实施例中一种基于python的R.java文件的优化方法的流程示意图;
图2为本发明实施例中一种基于python的R.java文件的优化方法的步骤S1流程示意图;
图3为本发明实施例中一种基于python的R.java文件的优化方法的步骤S2流程示意图;
图4为本发明实施例中一种基于python的R.java文件的优化方法的步骤S3流程示意图;
图5为本发明实施例中一种基于python的R.java文件的优化系统的结构示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例提供一种基于python的R.java文件的优化方法:所述R.java文件用于存储应用程序中java代码源文件调用资源的资源名称和资源值,该方法包括:
步骤S1,创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于所述python字典对象中;
步骤S2,创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于所述路径列表中;
步骤S3,遍历所述路径列表,通过所述java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;
步骤S4,清空R.java文件的内容。
所述资源值为常量或变量值。
参见图2所示,步骤S1的具体过程包括:
S101,找到R.java文件的目录;
R.java文件的路径在应用程序的安装包名的直接目录下。例如,一个应用的包名是com.adc.xxx,其R.java文件在应用目录路径为com/adc/xxx/R.java,所以R.JAVA文件路径格式就是pkg/R.java,在所有android应用中R.java文件所生成的位置固定,应用程序的安装包名的直接目录下。这里定位好后为后续优化做准备。
S102,遍历R.java文件的目录,获得其资源的资源名称;
S103,遍历全部资源,获取其资源值;
S104,将资源名称和资源值存储到所述python字典对象中。
遍历R.java文件的目录,获得其资源的资源名称包括:
通过python的open函数打开R.java文件,然后调用python的read line函数遍历R.java文件的每一行,通过python的find函数找出R.java文件下包含资源值的全部资源,通过python的replace函数获得资源的资源名称。
例如,首先通过python的open函数打开R.JAVA文件,参数就是1中的R.java文件路径,然后调用python的readline函数遍历R.java文件的每一行,R.java文件下内部类声明前缀是“publicstaticfinalclass”,比如drawabe类的声明就是“publicstaticfinalclassdrawabe”,当读取每一行时先通过python的find函数判断当前行是否包含字符串“publicstaticfinalclass”,当包含表明此处有一个内部类,然后通过replace函数将将“publicstaticfinalclass”替换成空值,再次调用replace函数将“{”字符置为空“{”是java类的语法字符用来包裹java类的数据体,当替换完成后所得的字符串就是该资源的类名。
遍历全部资源,获取其资源值包括:
遍历R.java文件下遍历全部资源,调用python的replace函数获得全部资源里包含的资源值。
例如,当接下来字符串前缀是“public static final int”或者是“publicstatic int”表示是drawabe下的资源常量和变量,同样调用python的replace函数将“public static final int”或者“public static int”替换成空字符串,然后得到一个等于格式的字符串,比如前面的a常量在drawabe静态内部类下的声明是“public staticfinal int a=1”,那么前面方法将得到字符串“a=1”,然后调用python的split函数将“a=1”以字符“=”拆分,得到2个子串“a”和“1”,其中a就是成员名(这里可以命名为fieldname),当前资源的全称就是R.classname.Fieldname,1就是资源值。然后将资源的全称作为python字典对象的key,资源值(前面例子的1)作为字典的值添加到字典中。
参见图3所示,步骤S2的具体过程包括:
S201,获取应用程序中所有的java代码源文件的目录,扫描出其下所有的子目录和文件;
S202,判断扫描出的文件中哪些是java代码源文件;
S203,将扫描出的文件中的java代码源文件经过的全部目录拼成该java代码源文件的路径,并将该java代码源文件的路径存到路径列表中。
例如,首先通过外部传入java代码源文件的目录,然后通过python的os.listdir函数扫描出其下所有的文件或者目录,当其下是目录时,需要递归查询,直到找到其所有子目录下的文件,os.listdir返回的就是一个子文件或者目录名,所以需要通过python的os.path.join函数将目录和文件名拼接成一个完整的文件或者目录的绝对路径,然后调用python提供的os.path.isdir函数判断该路径是否是目录,是目录就递归,当读取到是文件时,还需要判断该文件是否以.java文件为后缀,因为java源文件目录下不能保证全部就是纯java文件,判断后缀可以使用python的os.path.splitext函数,该方法返回一个文件名和后缀名的数组,所以数组的偏移为0就是不带后缀的文件名,偏移为1就是该文件的后缀,然后通过后缀比较,如果是.java就表明是需要读取的文件.最后将遍历得到的所有java代码源文件存到一个路径列表中。这里是为了获取所有可能使用R.java文件中资源常量和变量的类,将其统计,后续进行批量替换。
参见图4所示,步骤S3的具体过程包括:
S301,遍历所述路径列表,通过python的open函数打开所述java代码源文件的路径中对应的java代码源文件;
S302,然后在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值;
S303,使用python的replace函数将java代码源文件中的资源名称替换成资源值。
例如,遍历路径列表,获取其保存的java代码源文件路径,通过open函数将其打开,然后对每个java代码源文件进行遍历python字典对象,通过调用python的replace函数将资源名成其真实的常量或者变量值,比如resdict中存储了资源对<R.drawabe.a,1>,当一个java文件b.java中查找到R.drawabe.a时,将R.drawabe.a替换成1依次轮训遍历,直到将所有的java代码源文件中资源的引用全部替换为止。当资源id全部替换完成后,其实R.java文件已经没有什么作用了,为接下来清空R.java文件做准备。这里是直接替换掉所有使用到的R中的资源,从而减少对R.java文件的依赖。
步骤S4的具体过程包括:通过python的open函数打开R.java文件,然后调用python的replace函数将R.java文件中所有内容替换为空。
虽然R.java文件中的变量与常量已经没有用处,R.java文件也没有用途,但是这里并不能直接对其进行删除,因为有些java代码源文件可能存在引用了R.java文件如果删除就会导致项目无法编译通过,这里可以直接对R.java文件进行清空操作,使其成一个空实现,没有任何的内容,这里直接通过python的open的函数对其进行打开,然后调用replace函数将所有内容替换成字符串“public static final class R{}”就行。从而完全去掉R.java文件所消耗的大小当外部已经没有使用R.java文件的资源后,R.java文件已经没有作用,所以直接作为空类的实现只是为了保持兼容性。
参见图5所示,本发明还公开了一种基于python的R.java文件的优化系统,包括:
资源值获取模块,用于创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于所述python字典对象中;
路径列表模块,用于创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于所述路径列表中;
替换模块,用于遍历所述路径列表,通过所述java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;
清空模块,用于清空R.java文件。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (10)

1.一种基于python的R.java文件的优化方法,所述R.java文件用于存储应用程序中java代码源文件调用资源的资源名称和资源值,其特征在于,该方法包括:
步骤S1,创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于所述python字典对象中;
步骤S2,创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于所述路径列表中;
步骤S3,遍历所述路径列表,通过所述java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;
步骤S4,清空R.java文件的内容。
2.如权利要求1所述的一种基于python的R.java文件的优化方法,其特征在于:R.java文件的路径在应用程序的安装包名的直接目录下。
3.如权利要求1所述的一种基于python的R.java文件的优化方法,其特征在于:所述资源值为常量或变量值。
4.如权利要求1所述的一种基于python的R.java文件的优化方法,其特征在于:步骤S1的具体过程包括:
S101,找到R.java文件的目录;
S102,遍历R.java文件的目录,获得其资源的资源名称;
S103,遍历全部资源,获取其资源值;
S104,将资源名称和资源值存储到所述python字典对象中。
5.如权利要求4所述的一种基于python的R.java文件的优化方法,其特征在于:遍历R.java文件的目录,获得其资源的资源名称包括:
通过python的open函数打开R.java文件,然后调用python的readline函数遍历R.java文件的每一行,通过python的find函数找出R.java文件下包含资源值的全部资源,通过python的replace函数获得资源的资源名称。
6.如权利要求4所述的一种基于python的R.java文件的优化方法,其特征在于:遍历全部资源,获取其资源值包括:
遍历R.java文件下遍历全部资源,调用python的replace函数获得全部资源里包含的资源值。
7.如权利要求1所述的一种基于python的R.java文件的优化方法,其特征在于:步骤S2的具体过程包括:
S201,获取应用程序中所有的java代码源文件的目录,扫描出其下所有的子目录和文件;
S202,判断扫描出的文件中哪些是java代码源文件;
S203,将扫描出的文件中的java代码源文件经过的全部目录拼成该java代码源文件的路径,并将该java代码源文件的路径存到路径列表中。
8.如权利要求1所述的一种基于python的R.java文件的优化方法,其特征在于:步骤S3的具体过程包括:
S301,遍历所述路径列表,通过python的open函数打开所述java代码源文件的路径中对应的java代码源文件;
S302,然后在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值;
S303,使用python的replace函数将java代码源文件中的资源名称替换成资源值。
9.如权利要求1所述的一种基于python的R.java文件的优化方法,其特征在于:步骤S4的具体过程包括:通过python的open函数打开R.java文件,然后调用python的replace函数将R.java文件中所有内容替换为空。
10.一种基于python的R.java文件的优化系统,其特征在于,包括:
资源值获取模块,用于创建python字典对象,遍历R.java文件目录,获取全部资源名称和与资源名称对应的资源值并存储于所述python字典对象中;
路径列表模块,用于创建路径列表,获取应用程序中所有的java代码源文件的路径并存储于所述路径列表中;
替换模块,用于遍历所述路径列表,通过所述java代码源文件的路径打开对应的java代码源文件,在python字典对象中查找所述java代码源文件调用资源的资源名称对应的资源值,将java代码源文件中的资源名称替换成资源值;
清空模块,用于清空R.java文件。
CN201611129939.3A 2016-12-09 2016-12-09 一种基于python的R.java文件的优化方法及优化系统 Active CN106648638B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611129939.3A CN106648638B (zh) 2016-12-09 2016-12-09 一种基于python的R.java文件的优化方法及优化系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611129939.3A CN106648638B (zh) 2016-12-09 2016-12-09 一种基于python的R.java文件的优化方法及优化系统

Publications (2)

Publication Number Publication Date
CN106648638A CN106648638A (zh) 2017-05-10
CN106648638B true CN106648638B (zh) 2019-08-23

Family

ID=58824324

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611129939.3A Active CN106648638B (zh) 2016-12-09 2016-12-09 一种基于python的R.java文件的优化方法及优化系统

Country Status (1)

Country Link
CN (1) CN106648638B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109324792B (zh) * 2018-10-09 2022-03-11 深圳点猫科技有限公司 一种基于编程语言的路由构建自动化方法及电子设备
CN109816007A (zh) * 2019-01-18 2019-05-28 北京智游网安科技有限公司 应用程序文字信息的行业分类方法、存储介质及终端设备
CN110059214B (zh) * 2019-04-01 2021-12-14 北京奇艺世纪科技有限公司 一种图像资源处理方法及装置
CN110659022B (zh) * 2019-08-19 2020-09-04 浙江邦盛科技有限公司 一种基于Java自动调用Python脚本的方法
CN110750632B (zh) * 2019-10-21 2022-09-09 闽江学院 一种改进的中文alice智能问答方法及系统
CN113987379A (zh) * 2021-10-19 2022-01-28 山东百盟信息技术有限公司 网页渲染引擎中日志模块Histogram的优化方法和装置
CN114003834A (zh) * 2021-10-19 2022-02-01 山东百盟信息技术有限公司 网页渲染引擎中日志模块Trace_Log的优化方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544414B (zh) * 2013-10-25 2015-08-19 江苏通付盾信息科技有限公司 一种Android系统应用的深度代码混淆方法
CN105204823B (zh) * 2014-05-29 2019-11-05 腾讯科技(深圳)有限公司 生成应用程序安装包的方法及装置
CN105915623A (zh) * 2016-05-20 2016-08-31 努比亚技术有限公司 应用安装包处理装置及方法

Also Published As

Publication number Publication date
CN106648638A (zh) 2017-05-10

Similar Documents

Publication Publication Date Title
CN106648638B (zh) 一种基于python的R.java文件的优化方法及优化系统
CN106980504B (zh) 一种应用程序开发方法及其工具、设备
US9830341B2 (en) Resource name generation and derivation utilizing attribute space monikers and their associated context
Gremme et al. GenomeTools: a comprehensive software library for efficient processing of structured genome annotations
Arlow et al. Enterprise patterns and MDA: building better software with archetype patterns and UML
JP4936654B2 (ja) コンポーネント用として言語独立ファイル及び対応する言語特有リソースファイルを作成する方法
US8126859B2 (en) Updating a local version of a file based on a rule
US20200183667A1 (en) Efficient immutable syntax representation with incremental change
US7305376B2 (en) Multiple language-dependent resources compacted into a single resource file
CN105808633A (zh) 数据归档方法和系统
CN103164249A (zh) 用于脚本语言编译器的扩展机制
CN103034486B (zh) 移动终端操作系统基于全系统扩展调用图的自动优化方法
US11474796B1 (en) Build system for distributed applications
CN103473367A (zh) 浏览器中使用本地应用程序的方法和网页浏览器
CN108268609A (zh) 一种文件路径的建立、访问方法和装置
JP6338714B2 (ja) 柔軟性の高いメタデータの合成
CN108279940A (zh) 一种web容器中的模块加载方法和装置
US8875113B2 (en) Managing JAVA class paths
CN103207872A (zh) 一种实时索引方法和服务器
US10606805B2 (en) Object-level image query and retrieval
CN103645913B (zh) J2ee系统中的语言加载方法及装置
US20210342327A1 (en) Method, device, and computer program product for information processing
Driesen Software and hardware techniques for efficient polymorphic calls
US20200057617A1 (en) Software code optimizer and method
CN103778181B (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20230810

Address after: Room 403, No.1 Youyi Road, Huangpu District, Guangzhou City, Guangdong Province, 510000 (office only)

Patentee after: Guangzhou Magic Crystal Intelligent Technology Co.,Ltd.

Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building

Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right