CN103279382A - 原生方式访问资源的方法、Java端、原生端及系统 - Google Patents

原生方式访问资源的方法、Java端、原生端及系统 Download PDF

Info

Publication number
CN103279382A
CN103279382A CN201310154461XA CN201310154461A CN103279382A CN 103279382 A CN103279382 A CN 103279382A CN 201310154461X A CN201310154461X A CN 201310154461XA CN 201310154461 A CN201310154461 A CN 201310154461A CN 103279382 A CN103279382 A CN 103279382A
Authority
CN
China
Prior art keywords
read
resource
causing trouble
former
context object
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.)
Granted
Application number
CN201310154461XA
Other languages
English (en)
Other versions
CN103279382B (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.)
WIYUN Inc
Original Assignee
WIYUN Inc
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 WIYUN Inc filed Critical WIYUN Inc
Priority to CN201310154461.XA priority Critical patent/CN103279382B/zh
Publication of CN103279382A publication Critical patent/CN103279382A/zh
Application granted granted Critical
Publication of CN103279382B publication Critical patent/CN103279382B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及通讯领域,具体涉及原生方式访问资源的方法、Java端、原生端及系统。该方法包括:Java端获取上下文对象;Java端将上下文对象通过JNI传递到原生端;原生端获得上下文对象后将上下文对象进行保存;原生端通过保存的上下文对象,调用getResource方法获得资源管理器;原生端通过资源管理器方法打开待读取资源;原生端获得输入流,通过输入流读取待读取资源的数据。Java端包括第一获取组件、传递组件。原生端包括:第二获取组件、调用组件、打开组件、读取组件;原生方式访问资源的系统包括:Java端和原生端。本发明方式简单,直接,没有额外的开销,节省了内存和时间,性能高。

Description

原生方式访问资源的方法、Java端、原生端及系统
技术领域
本发明涉及通讯领域,具体而言,涉及原生方式访问资源的方法、Java端、原生端及系统。
背景技术
现有的Android系统,主要通过两种方式来访问Android资源,方式一为通过Java端打开资源流,传递给原生端,原生端通过JNI方式读取资源内容;方式二Java端只传递APK路径给原生端,原生端通过libzip直接读取资源内容。这两种方式均导致Android性能较差,在Java端打开,原生端调用JNI都需要耗费额外的内存和时间,而且,需要包含额外的libzip库,代码更加复杂,且需要了解APK文件路径,增加了代码维护难度,性能上存在问题,因为需要解析APK,如果APK较大,速度会相应变慢。
发明内容
本发明的目的在于提供原生方式访问资源的方法、Java端、原生端及系统,以解决上述的问题。
在本发明的实施例中提供了一种原生方式访问资源的方法,包括:
Java端获取上下文对象;
所述Java端将所述上下文对象通过JNI传递到原生端;
所述原生端获得所述上下文对象后将所述上下文对象进行保存;
所述原生端通过保存的所述上下文对象,调用getResource方法获得资源管理器;
所述原生端通过资源管理器的方法打开待读取资源;
所述原生端获得输入流,通过所述输入流读取所述待读取资源的数据。
所述待读取资源的描述方式优选包括以下任一种:路径方式、资源标识ID方式。
所述原生端通过资源管理器的方法打开待读取资源优选包括:
所述原生端通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据;
所述原生端通过所述区块,使用ResTable的resolveReference方法获得所述待读取资源的真正区块位置;
若所述真正区块位置有效,通过ResTable的getTableCookie方法获得所述待读取资源的句柄;
所述原生端通过ResTable的getTableStringBlock方法,以所述区块为参数,获得所述待读取资源的真实路径。
所述原生端获得输入流优选包括:
所述原生端根据所述真实路径和所述句柄,通过Assert的openNonAsset方法打开所述待读取资源的输入流。
所述原生端通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据之前,所述原生端通过资源管理器的方法打开待读取资源优选还包括:通过编译对应不同版本的Android的getResource来完成对不同版本Android的适配。
本发明的一个实施例还提供一种根据上述任一项所述的原生方式访问资源的方法的Java端,
包括第一获取组件、传递组件;
所述第一获取组件,用于获取上下文对象;
所述传递组件,用于将所述上下文对象通过JNI传递到原生端。
本发明的一个实施例中还提供了一种上述任一项所述的原生方式访问资源的方法的原生端,
包括:第二获取组件、调用组件、打开组件、读取组件;
所述第二获取组件,用于获得所述上下文对象后将所述上下文对象进行保存;
所述调用组件,用于通过所述上下文对象,调用getResource方法获得资源管理器;
所述打开组件,用于通过资源管理器的方法打开待读取资源;
所述读取组件,用于获得输入流,通过所述输入流读取所述待读取资源的数据。
所述打开组件优选包括:第三获取组件、第四获取组件、第五获取组件、第六获取组件;
所述第三获取组件,用于通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据;
所述第四获取组件,用于通过所述区块,使用ResTable的resolveReference方法获得所述待读取资源的真正区块位置;
所述第五获取组件,用于若所述真正区块位置有效,通过ResTable的getTableCookie方法获得所述待读取资源的句柄;
所述第六获取组件,用于通过ResTable的getTableStringBlock方法,以所述区块为参数,获得所述待读取资源的真实路径。
所述读取组件,优选用于根据所述真实路径和所述句柄,通过Assert的openNonAsset方法打开所述待读取资源的输入流。
本发明一个实施例中还提供了一种所述的方法的原生方式访问资源的系统,
包括:上述的Java端、上述任一项所述的原生端。
本发明上述实施例的原生方式访问资源的方法、Java端、原生端及系统,从原生端访问Android资源,只需Java传入上下文对象,不依赖于APK具体位置,从原生端读取资源,保证读取的效率和灵活性,减少Java端的依赖性,提高代码模块化程度,通过原生端访问资源读取资源的方式简单,直接,没有额外的开销,节省了内存和时间,性能高。
附图说明
图1示出了一个实施例中原生方式访问资源的方法的流程示意图;
图2示出了图1步骤105的动态载入方式流程示意图;
图3示出了一个实施例中对应动态载入方式打开和读取资源的架构。
具体实施方式
下面通过具体的实施例子并结合附图对本发明做进一步的详细描述。
本发明的一个实施例提供了一种原生方式访问资源的方法,包括:
Java端获取上下文对象;
所述Java端将所述上下文对象通过JNI传递到原生端;
所述原生端获得所述上下文对象后将所述上下文对象进行保存;
所述原生端通过保存的所述上下文对象,调用getResource方法获得资源管理器;
所述原生端通过资源管理器的方法打开待读取资源;
所述原生端获得输入流,通过所述输入流读取所述待读取资源的数据。
本发明的一个实施例还提供了一种对应上述方法的Java端,包括第一获取组件、传递组件;
所述第一获取组件,用于获取上下文对象;
所述传递组件,用于将所述上下文对象通过JNI传递到原生端。
本发明的一个实施例还提供了一种对应上述方法的原生端,包括:第二获取组件、调用组件、打开组件、读取组件;
所述第二获取组件,用于获得所述上下文对象后将所述上下文对象进行保存;
所述调用组件,用于通过所述上下文对象,调用getResource方法获得资源管理器;
所述打开组件,用于通过资源管理器的方法打开待读取资源;
所述读取组件,用于获得输入流,通过所述输入流读取所述待读取资源的数据。
本发明一个实施例中还提供了一种对应上述的方法的原生方式访问资源的系统,
包括:上述的Java端、上述任一项所述的原生端。
本发明上述实施例的原生方式访问资源的方法、Java端、原生端及系统,从原生端访问Android资源,只需Java传入上下文对象,不依赖于APK具体位置,从原生端读取资源,保证读取的效率和灵活性。
接下来,本发明将通过一些具体的实施方式来详细描述原生方式访问资源的方法:
上述方法是对应在Android上通过原生方式访问资源的方法,发明点之一:只需要Java端传入上下文对象,不依赖与APK具体位置,减小Java端的依赖,提高代码模块化程度。
发明点之二:通过调用Android私有的API实现从原生端读取资源,保证读取的效率和灵活性。
发明点之三:在不影响上层应用的情况下,动态载入Android适配库,上层通过接口层隔离具体实现,保证了方案的通用性。
上述多个发明点的详细操作步骤为,如图1所示:
步骤101,Java端获取上下文对象;
步骤102,Java端将该上下文对象通过JNI传递到原生端;
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍使用其他语言,只要调用约定受支持就可以了。
Java端只需要获取上下文对象并将上下文对象传递给原生端,从而减少了对Java端的依赖性,代码模块化程度高。
步骤103,原生端获得该上下文对象后将该上下文对象进行保存;
保存后备后调用。
步骤104,原生端通过保存的上下文对象,调用getResource方法获得资源管理器;
getResource方法是本领域技术人员所公知的一个功能方法。
步骤105,原生端通过资源管理器的方法打开待读取资源;
打开和读取资源信息用到了Android的一些私有接口,为了保证兼容性,本步骤采用了动态载入方式,流程图如图2所示:
步骤105-1,通过编译对应不同版本的Android的getResource来完成对不同版本Android的适配;
上层应用调用的是接口层,底层改动不影响上层,而具体的实现则针对Android版本不同略有差别,这个差别很小,通过上述动态载入Android适配库,上层通过接口层隔离具体实现,保证了方案的通用性。
不同的Android版本对应不同的getResource,各getResource不同也仅是在参数上的不同。
步骤105-2,所述原生端通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据;
步骤105-3,所述原生端通过所述区块,使用ResTable的resolveReference方法获得所述待读取资源的真正区块位置;
步骤105-4,若所述真正区块位置有效,通过ResTable的getTableCookie方法获得所述待读取资源的句柄;
步骤105-5,所述原生端通过ResTable的getTableStringBlock方法,以所述区块为参数,获得所述待读取资源的真实路径。
对应动态载入方式的打开和读取资源信息的架构如图3,所示,上层应用调用的是接口层,因为底层改动不影响上层,而具体的实现则针对Android版本不同略有差别。
上述实现过程简单精悍,虽然需要针对不同平台进行适配,但是,这只在第一步进行不同操作,而适配过程中,对应不同版本的Android不同版本的getResource方法参数不同,进行对应性编译控制,针对不同平台编译不同的库即可。
步骤106,原生端根据所述真实路径和所述句柄,通过Assert的openNonAsset方法打开所述待读取资源的输入流。
步骤107,原生端通过该输入流读取待读取资源的数据。
分析上述整个方案,与传统方式相比:
1.Java端只需要传递给原生端上下文对象,对Java端依赖性小,代码模块化程度高;
2.打开和读取资源简单直接,没有额外的开销,节省了内存和事件,性能极高;
3.直接调用Android接口访问资源,因此,可获得资源的详细信息,其他方案都无法得到。
需要说明的是,上述提到的各种方法(getResource方法、ResTable的getResource方法、ResTable的resolveReference方法、ResTable的getTableCookie方法、ResTable的getTableStringBlock方法),以及API、以及Android均为本领域技术人员所了解,此处不再赘述。
本发明的一些实施例中还提供了对应上述通过原生方式访问资源的方法的Java端,包括第一获取组件、传递组件;
所述第一获取组件,用于获取上下文对象;
所述传递组件,用于将所述上下文对象通过JNI传递到原生端。
本发明的一个实施例中还提供了一种上述任一项所述的原生方式访问资源的方法的原生端,
包括:第二获取组件、调用组件、打开组件、读取组件;
所述第二获取组件,用于获得所述上下文对象后将所述上下文对象进行保存;
所述调用组件,用于通过所述上下文对象,调用getResource方法获得资源管理器;
所述打开组件,用于通过资源管理器的方法打开待读取资源;
所述读取组件,用于获得输入流,通过所述输入流读取所述待读取资源的数据。
所述打开组件优选包括:第三获取组件、第四获取组件、第五获取组件、第六获取组件;
所述第三获取组件,用于通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据;
所述第四获取组件,用于通过所述区块,使用ResTable的resolveReference方法获得所述待读取资源的真正区块位置;
所述第五获取组件,用于若所述真正区块位置有效,通过ResTable的getTableCookie方法获得所述待读取资源的句柄;
所述第六获取组件,用于通过ResTable的getTableStringBlock方法,以所述区块为参数,获得所述待读取资源的真实路径。
所述读取组件,优选用于根据所述真实路径和所述句柄,通过Assert的openNonAsset方法打开所述待读取资源的输入流。
本发明一个实施例中还提供了一种所述的方法的原生方式访问资源的系统,
包括:上述的Java端、上述任一项所述的原生端。
本发明上述实施例的原生方式访问资源的方法、Java端、原生端及系统,从原生端访问Android资源,只需Java传入上下文对象,不依赖于APK具体位置,从原生端读取资源,保证读取的效率和灵活性,减少Java端的依赖性,提高代码模块化程度,通过原生端访问资源读取资源的方式简单,直接,没有额外的开销,节省了内存和时间,性能高。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种原生方式访问资源的方法,其特征在于,包括:
Java端获取上下文对象;
所述Java端将所述上下文对象通过JNI传递到原生端;
所述原生端获得所述上下文对象后将所述上下文对象进行保存;
所述原生端通过保存的所述上下文对象,调用getResource方法获得资源管理器;
所述原生端通过资源管理器的方法打开待读取资源;
所述原生端获得输入流,通过所述输入流读取所述待读取资源的数据。
2.根据权利要求1所述的方法,其特征在于,
所述待读取资源的描述方式包括以下任一种:路径方式、资源标识ID方式。
3.根据权利要求1或2所述的方法,其特征在于,
所述原生端通过资源管理器的方法打开待读取资源包括:
所述原生端通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据;
所述原生端通过所述区块,使用ResTable的resolveReference方法获得所述待读取资源的真正区块位置;
若所述真正区块位置有效,通过ResTable的getTableCookie方法获得所述待读取资源的句柄;
所述原生端通过ResTable的getTableStringBlock方法,以所述区块为参数,获得所述待读取资源的真实路径。
4.根据权利要求3所述的方法,其特征在于,
所述原生端获得输入流包括:
所述原生端根据所述真实路径和所述句柄,通过Assert的openNonAsset方法打开所述待读取资源的输入流。
5.根据权利要求3所述的方法,其特征在于,
所述原生端通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据之前,所述原生端通过资源管理器的方法打开待读取资源还包括:通过编译对应不同版本的Android的getResource来完成对不同版本Android的适配。
6.一种根据权利要求1-5任一项所述的原生方式访问资源的方法的Java端,其特征在于,
包括第一获取组件、传递组件;
所述第一获取组件,用于获取上下文对象;
所述传递组件,用于将所述上下文对象通过JNI传递到原生端。
7.一种根据权利要求1-5任一项所述的原生方式访问资源的方法的原生端,其特征在于,
包括:第二获取组件、调用组件、打开组件、读取组件;
所述第二获取组件,用于获得所述上下文对象后将所述上下文对象进行保存;
所述调用组件,用于通过所述上下文对象,调用getResource方法获得资源管理器;
所述打开组件,用于通过资源管理器的方法打开待读取资源;
所述读取组件,用于获得输入流,通过所述输入流读取所述待读取资源的数据。
8.根据权利要求7所述的原生端,其特征在于,
所述打开组件包括:第三获取组件、第四获取组件、第五获取组件、第六获取组件;
所述第三获取组件,用于通过Android的资源类ResTable的getResource方法获得所述待读取资源的区块、所述数据;
所述第四获取组件,用于通过所述区块,使用ResTable的resolveReference方法获得所述待读取资源的真正区块位置;
所述第五获取组件,用于若所述真正区块位置有效,通过ResTable的getTableCookie方法获得所述待读取资源的句柄;
所述第六获取组件,用于通过ResTable的getTableStringBlock方法,以所述区块为参数,获得所述待读取资源的真实路径。
9.根据权利要求7所述的原生端,其特征在于,
所述读取组件,用于根据所述真实路径和所述句柄,通过Assert的openNonAsset方法打开所述待读取资源的输入流。
10.根据权利要求1-5任一项所述的方法的原生方式访问资源的系统,其特征在于,
包括:要求如权利要求6所述的Java端、如权利要求7-9任一项所述的原生端。
CN201310154461.XA 2013-04-27 2013-04-27 原生方式访问资源的方法、Java端、原生端及系统 Expired - Fee Related CN103279382B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310154461.XA CN103279382B (zh) 2013-04-27 2013-04-27 原生方式访问资源的方法、Java端、原生端及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310154461.XA CN103279382B (zh) 2013-04-27 2013-04-27 原生方式访问资源的方法、Java端、原生端及系统

Publications (2)

Publication Number Publication Date
CN103279382A true CN103279382A (zh) 2013-09-04
CN103279382B CN103279382B (zh) 2016-12-28

Family

ID=49061917

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310154461.XA Expired - Fee Related CN103279382B (zh) 2013-04-27 2013-04-27 原生方式访问资源的方法、Java端、原生端及系统

Country Status (1)

Country Link
CN (1) CN103279382B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104424085A (zh) * 2013-09-07 2015-03-18 镇江金软计算机科技有限责任公司 一种基于jni获取本机cpu和内存占用率的方法
CN105898272A (zh) * 2015-12-28 2016-08-24 乐视致新电子科技(天津)有限公司 360度图像加载方法、加载模块及移动终端
WO2017148298A1 (zh) * 2016-03-02 2017-09-08 阿里巴巴集团控股有限公司 混合模型列表项重用的方法及设备
CN108052319A (zh) * 2016-10-27 2018-05-18 北京京东尚科信息技术有限公司 脚本模块引用原生资源的方法、装置及终端设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102236576A (zh) * 2011-08-09 2011-11-09 复旦大学 一种支持混合模式执行的Java虚拟机执行引擎
CN102902911A (zh) * 2012-09-18 2013-01-30 北京深思洛克软件技术股份有限公司 一种在Java虚拟机中安全运行第三方代码的方法
CN102929593A (zh) * 2011-08-12 2013-02-13 中国科学院声学研究所 一种Android系统兼容内置应用的方法
CN102968333A (zh) * 2011-06-30 2013-03-13 国际商业机器公司 使本机程序被主程序调用时继承事务上下文的方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102968333A (zh) * 2011-06-30 2013-03-13 国际商业机器公司 使本机程序被主程序调用时继承事务上下文的方法和系统
CN102236576A (zh) * 2011-08-09 2011-11-09 复旦大学 一种支持混合模式执行的Java虚拟机执行引擎
CN102929593A (zh) * 2011-08-12 2013-02-13 中国科学院声学研究所 一种Android系统兼容内置应用的方法
CN102902911A (zh) * 2012-09-18 2013-01-30 北京深思洛克软件技术股份有限公司 一种在Java虚拟机中安全运行第三方代码的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
向模军: "利用JNI实现Java与C++通信", 《计算机时代》 *
李艳丽: "Android事件处理过程剖析", 《长春理工大学学报F自然科学版)》 *
许晓宁: "Java Native Interface应用研究", 《计算机科学》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104424085A (zh) * 2013-09-07 2015-03-18 镇江金软计算机科技有限责任公司 一种基于jni获取本机cpu和内存占用率的方法
CN105898272A (zh) * 2015-12-28 2016-08-24 乐视致新电子科技(天津)有限公司 360度图像加载方法、加载模块及移动终端
WO2017148298A1 (zh) * 2016-03-02 2017-09-08 阿里巴巴集团控股有限公司 混合模型列表项重用的方法及设备
US10691427B2 (en) 2016-03-02 2020-06-23 Alibab Group Holding Limited Method and apparatus reusing listcell in hybrid application
US10789051B1 (en) 2016-03-02 2020-09-29 Alibaba Group Holding Limited Method and apparatus reusing ListCell in hybrid application
CN108052319A (zh) * 2016-10-27 2018-05-18 北京京东尚科信息技术有限公司 脚本模块引用原生资源的方法、装置及终端设备

Also Published As

Publication number Publication date
CN103279382B (zh) 2016-12-28

Similar Documents

Publication Publication Date Title
CN104821954B (zh) 一种跨平台远程过程调用方法
CN106569869B (zh) 插件化打包方法及装置
Vrijders et al. Prototyping the recursive internet architecture: the IRATI project approach
CA2768752C (en) Terminal device of non-android platform for executing android applications, and computer readable recording medium for storing program of executing android applications on non-android platform
CN101421711A (zh) 用于资源受限设备的虚拟执行系统
CN103077024B (zh) 一种支持SaaS应用流程按需定制与运行的装置及方法
CN101452402A (zh) 软件运行系统和软件运行方法
CN103685399A (zh) 一种登录类Unix虚拟容器的方法、装置和系统
CN103106058A (zh) 一种基于Android系统的双屏显示方法及智能显示终端
CN103176804A (zh) 一种用户界面实现方法
CN103997543B (zh) 一种信息交互方法及分布式仿真系统
CN103279382A (zh) 原生方式访问资源的方法、Java端、原生端及系统
CN101000550A (zh) 一种嵌入式系统远程在线再配置方法
CN103019941A (zh) 程序调试方法和装置
CN104036303A (zh) 一种rfid中间件及其实现通信的方法
CN106502717A (zh) 应用程序运行方法及装置
CN107704499A (zh) 一种应用程序的页面跳转控制方法及装置
CN105515811A (zh) Usb无线网卡配置方法、主机、usb无线网卡及通信系统
CN102819430B (zh) 一种在linux环境下实现串行通信接口的装置及方法
CN102073581A (zh) 一种调试信息的输出方法及系统
CN103631645A (zh) 一种基于数字医疗的数字家庭中间件系统
CN117407065A (zh) 网卡预启动控制方法、装置、设备、系统及存储介质
CN103677842A (zh) 软件工具配置式集成扩展调用方法与系统
CN104918113B (zh) 一种模块电视的功能卡端兼容方法及系统
CN103870280A (zh) 基于flex与jsp的网页无缝结合处理方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161228