在插件中关联Native库的方法及装置制造方法及图纸

技术编号:14585535 阅读:110 留言:0更新日期:2017-02-08 15:03
本发明专利技术提供了一种在插件中关联Native库的方法及装置,该方法包括:在安装插件时,获取所述插件的APK路径;根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,其中,SO库表示Native库的名称;获取待匹配的目标指令集,并确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库;释放与所述目标指令集适配的一个或多个SO库至指定释放路径;基于所述指定释放路径关联所述插件与所述一个或多个SO库。本发明专利技术实施例在安装插件时充分利用Android系统的逻辑,来实现在插件中对SO库的加载。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别是一种在插件中关联Native库的方法及装置。
技术介绍
在应用开发时,会使用到NDK(NativeDevelopmentKit)帮助开发者快速开发动态库,它将会生成二进制文件.so文件,作用相当于windows下的.dll文件。.so文件是在程序运行时动态调用的一个库文件,可以对该库文件进行修改。例如,在编程的过程中,遇到一类问题的解决需要抽象出共有的对象(称之为基类),具体的实现由它的子类来完成,这样如果后续要修改程序,则只需要修改子类的内容,基类是不会修改的,这样可以把子类的实现封装在一个.so文件中,在运行时动态加载它。相关技术中,在安装Native库时,需要将SO文件放入Assets(或其它目录下),等应用启动后,将其释放到一个特定的目录中,并通过System.load方法进行加载,而其缺点在于:1)需要在加载时先做释放,这就需要修改代码来实现了,操作步骤较为繁琐;2)通用性不强,一旦涉及到多个SO库的联合加载,则可能因为有的SO库释放不成功,从而导致出现崩溃等情况。综上所述,专利技术人发现亟待提供一种有效地在插件中关联Native库的方案。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的在插件中关联Native库的方法及相应的装置。依据本专利技术的一方面,提供了一种在插件中关联Native库的方法,包括:在安装插件时,获取所述插件的APK路径;根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,其中,SO库表示Native库的名称;获取待匹配的目标指令集,并确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库;释放与所述目标指令集适配的一个或多个SO库至指定释放路径;基于所述指定释放路径关联所述插件与所述一个或多个SO库。可选地,根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,包括:根据所述插件的APK路径,获取在所述插件的APK的Libs目录下的文件名;从Libs目录下的文件名中提取至少一个SO库。可选地,根据所述插件的APK路径,获取在所述插件的APK的Libs目录下的文件名,包括:根据所述插件的APK路径,获取所述插件的APK中的所有文件名;获取所有文件名对应的文件在压缩包中的路径,并根据所有文件名对应的文件在压缩包中的路径,确定在所述插件的APK的Libs目录下的文件名。可选地,所述方法还包括:获取所述至少一个SO库各自在所述插件的APK中的SO文件路径,其中,所述SO文件路径中包含SO文件支持的指令集信息,所述SO文件表示SO库的文件;根据所述SO文件路径中包含的所述指令集信息,生成所述至少一个SO库的指令集列表。可选地,确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库,包括:将所述目标指令集与所述至少一个SO库的指令集列表进行匹配,得到匹配的指令集对应的SO库作为与所述目标指令集适配的一个或多个SO库。可选地,所述目标指令集中还包括指令集的位数,所述指令集的位数为所述插件的主程序的位数;将所述目标指令集与所述至少一个SO库的指令集列表进行匹配,包括:从所述至少一个SO库的指令集列表中获取所述位数的指令集列表;将所述目标指令集与所述位数的指令集列表进行匹配。可选地,所述插件的主程序的位数包括32位或64位。可选地,通过以下步骤确定所述插件的主程序的位数:反射调用VMRuntime.getRumtime().is64Bit方法,确定所述插件的主程序的位数是否为64位;若是,则确定所述插件的主程序的位数为64位;若否,则确定所述插件的主程序的位数为32位。可选地,释放与所述目标指令集适配的一个或多个SO库至指定释放路径,包括:从所述插件的APK中读取与所述目标指令集适配的一个或多个SO库对应的SO文件,并将其以流的形式释放至指定释放路径。可选地,释放与所述目标指令集适配的一个或多个SO库至指定释放路径,包括:获取所述插件的版本号;将与所述目标指令集适配的一个或多个SO库,释放至包含所述插件的版本号的指定释放路径。可选地,若PackageInfo对象代表所述插件的所有信息;基于所述指定释放路径关联所述插件与所述一个或多个SO库,包括:在PackageInfo对象中添加所述指定释放路径,以关联所述插件与所述一个或多个SO库。可选地,在PackageInfo对象中添加所述指定释放路径,包括:在PackageInfo对象中添加用于存放SO库的路径的nativeLibraryDir字段;将所述指定释放路径赋值给所述nativeLibraryDir字段。依据本专利技术的另一方面,还提供了一种在插件中关联Native库的装置,包括:APK路径获取模块,适于在安装插件时,获取所述插件的APK路径;SO库获取模块,适于根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,其中,SO库表示Native库的名称;确定模块,适于获取待匹配的目标指令集,并确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库;释放模块,适于释放与所述目标指令集适配的一个或多个SO库至指定释放路径;关联模块,适于基于所述指定释放路径关联所述插件与所述一个或多个SO库。可选地,所述SO库获取模块还适于:根据所述插件的APK路径,获取在所述插件的APK的Libs目录下的文件名;从Libs目录下的文件名中提取至少一个SO库。可选地,所述SO库获取模块还适于:根据所述插件的APK路径,获取所述插件的APK中的所有文件名;获取所有文件名对应的文件在压缩包中的路径,并根据所有文件名对应的文件在压缩包中的路径,确定在所述插件的APK的Libs目录下的文件名。可选地,所述装置还包括:生成模块,适于获取所述至少一个SO库各自在所述插件的APK中的SO文件路径,其中,所述SO文件路径中包含SO文件支持的指令集信息,所述SO文件表示SO库的文件;根据所述SO文件路径中包含的所述指令集信息,生成所述至少一个SO库的指令集列表。可选地,所述确定模块还适于:将所述目标指令集与所述至少一个SO库的指令集列表进行匹配,得到匹配的指令集对应的SO库作为与所述目标指令集适配的一个或多个SO库。可选地,所述确定模块还适于:在所述目标指令集中还包括指令集的位数,所述指令集的位数为所述插件的主程序的位数时,从所述至少一个SO库的指令集列表中获取所述位数的指令集列表;将所述目标指令集与所述位数的指令集列表进行匹配。可选地,所述插件的主程序的位数包括32位或64位。可选地,所述确定模块还适于:反射调用VMRuntime.getRumtime().is64Bit方法,确定所述插件的主程序的位数是否为64位;若是,则确定所述插件的主程序的位数为64位;若否,则确定所述插件的主程序的位数为32位。可选地,所述释放模块还适于:从所述插件的APK中读取与所述目标指令集适配的一个或多个SO库对应的SO文件,并将其以流的形式释放至指定释放路径。可选地,所述释放模块还适于:获取所述插件的版本号;将与所述目标指令集适配的一个或多个SO库,释放至包含所述插件的版本号的指定释放路径。可选地,所述关联模块还适于:若PackageInfo对象代表所本文档来自技高网...

【技术保护点】
一种在插件中关联Native库的方法,包括:在安装插件时,获取所述插件的APK路径;根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,其中,SO库表示Native库的名称;获取待匹配的目标指令集,并确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库;释放与所述目标指令集适配的一个或多个SO库至指定释放路径;基于所述指定释放路径关联所述插件与所述一个或多个SO库。

【技术特征摘要】
1.一种在插件中关联Native库的方法,包括:在安装插件时,获取所述插件的APK路径;根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,其中,SO库表示Native库的名称;获取待匹配的目标指令集,并确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库;释放与所述目标指令集适配的一个或多个SO库至指定释放路径;基于所述指定释放路径关联所述插件与所述一个或多个SO库。2.根据权利要求1所述的方法,其中,根据所述插件的APK路径,获取所述插件的APK中的至少一个SO库,包括:根据所述插件的APK路径,获取在所述插件的APK的Libs目录下的文件名;从Libs目录下的文件名中提取至少一个SO库。3.根据权利要求2所述的方法,其中,根据所述插件的APK路径,获取在所述插件的APK的Libs目录下的文件名,包括:根据所述插件的APK路径,获取所述插件的APK中的所有文件名;获取所有文件名对应的文件在压缩包中的路径,并根据所有文件名对应的文件在压缩包中的路径,确定在所述插件的APK的Libs目录下的文件名。4.根据权利要求1-3中任一项所述的方法,其中,还包括:获取所述至少一个SO库各自在所述插件的APK中的SO文件路径,其中,所述SO文件路径中包含SO文件支持的指令集信息,所述SO文件表示SO库的文件;根据所述SO文件路径中包含的所述指令集信息,生成所述至少一个SO库的指令集列表。5.根据权利要求4所述的方法,其中,确定所述至少一个SO库中与所述目标指令集适配的一个或多个SO库,包括:将所述目标指令集与所述至少一个SO库的指令集列表进行匹配,得到匹配的指令集对应...

【专利技术属性】
技术研发人员:张炅轩宋照春
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1