minecraftpe吧 关注:638,475贴子:15,078,296

NA、BL、ModdedPE全面深度解剖

只看楼主收藏回复

在阅读本文章时您可能需要以下【前置知识】以获得最佳的阅读体验。
* NativeAddon是什么?
NativeAddon是指本地化插件/原生插件。"原生"一词和android原生开发中的原生同义,即使用C/C++进行编写,通过编译器编译成(linux下的)动态链接库(.so),Addon意为插件,这个无需过多解释。
* NativeAddon只存在于MinecraftPE吗?
并不,每一个程序都可以(以一定手段在一定程度上)编写出针对它的NativeAddon,甚至还有针对插件的插件,如ModdedPE的功能拓展库Gridge,实际上它还有一个附加插件用于封装&集成基函数。
* BlockLauncher插件是什么?
BlockLauncher插件是NativeAddon的一个具体化。它针对和作用于MinecraftPE,BlockLauncher使用代理MinecraftPE原dex文件的方式在BlockLauncher程序内部手动加载MinecraftPE所使用的音效引擎fmod(libfmod.so)与MinecraftPE的核心代码libminecraftpe.so,以便于使用libsubstrate.so(一个native层的hook库)对libminecraftpe.so进行hook。
* BlockLauncher插件真的是"BlockLauncher的插件"吗?
严格来说并不是,这只是习惯用这个名字(所以也被人们叫做NativeAddon,注意这里的NativeAddon不是指一开头的广义NativeAddon,是个体上的MinecraftPE NativeAddon),前面说到BlockLauncher插件是NativeAddon的一个具体化,实际上BlockLauncher插件还是第一个MinecraftPE NativeAddon的具体化。在BlockLauncher广泛传播之后,越来越多的同类型产品也开始出现,如ModdedPE。
* BlockLauncher插件只工作在BlockLauncher上吗?
可以说是,也可以说不是,这个问题的理解方向很多。BlockLauncher插件拥有一些特殊的标记使得它与常规app区分开来,也指明它的目标只有BlockLauncher,但是其本质工作的so文件能够被任何软件加载(java: System.load,BlockLauncher与ModdedPE使用的都是这条方法进行加载,这是最常规的方式)。
* BlockLauncher插件、ModPEScript和PTPmod(.mod)有何关系?
ModPEScript由javascript引擎Mozilla Rhino执行,由BlockLauncher内置的api(相当于一个内置的BlockLauncher插件,具体文件为libmcpelauncher.so)实现对MinecraftPE的操作具体化,基本上ModPE的函数都由这个api提供,再到java层封装成对外的ModPE-api。PTPmod(对应的加载器为PatchTool,其作者为joshuahuelsman)是最早出现的MinecraftPE类型,在BlockLauncher出现之前,PTPmod一直在扮演着Minecraft Addon领域的重要角色,PTPmod工作的原理和BlockLauncher插件相似却又不同,不同之处主要体现在PTPmod的开发流程,通过16进制重写libminecraftpe.so得到一个新的so文件,并使用diff库生成一份差异文件,即.mod文件,因此PTPmod开发要求的水准更高,难度更高,局限性也更大,但它却是MinecraftPE最早的插件类型。事实上ModPE这一概念也是在卓伟版的BlockLauncher出现之前就已经提出了,卓伟相当于是一个续作者,但卓伟版的BlockLauncher成功的将ModPE扩散开来,使其函数库更为充足,编写更为简易。这里顺带一提,BlockLauncher除以上三种类型外,还支持另外一种冷门的插件(.coffee),即CoffeeScript,工作原理利用的是CoffeeScript能直接翻译成javascript这一Coffee特点。
* ModdedPE的Nmod是NativeAddon吗?
Nmod即NativeMod,这个问题的答案也很显然,Nmod和BlockLauncher插件都是NativeAddon的具体化,实际上这一类插件几乎没有什么不同,Nmod只需稍作改动就能变成BlockLauncher插件,BlockLauncher插件亦然。


1楼2018-08-15 09:56回复
    该楼层疑似违规已被系统折叠 查看此楼


    来自Android客户端2楼2018-08-15 09:57
    回复
      2026-03-10 11:35:20
      广告
      不感兴趣
      开通SVIP免广告
      【BlockLauncher】
      这里重点分析一下BlockLauncher的java层,也就是更偏向于ModPE,我们要分析的对象是net/zhuoweizhang/mcpelauncher/包下的内容。
      AddonManager、PatchManager、ScriptManager是三大插件管理类,类下的方法能够直接操作MinecraftPE原本的游戏内容,而像RedirectPackageManager、TrustModifier$AlwaysTrustManager、WrappedPackageManager这三个辅助型管理类和游戏本身就没有特别大的关系了。
      上面三个插件管理类都具有对其针对的目标(NativeAddon、PTPmod、ModPE)加载、启用、禁用、移除的核心管理功能,其中ScriptManager内容更多,因此也更为复杂,其内部类还包括AfterCapeDownloadAction、AfterSkinDownloadAction(两大下载事件类,现在的版本基本已经没有任何用处了)、ParseThread、ScriptState、SelectLevelRequest、SkinLoader、TextureRequests、JoinServerRequest(工具类,所以有加载器,请求发送的字眼),而后的BlockHostObject(其中的函数曾被叫做无前缀函数,因为这些方法是直接以属性的状态被放入Scope(理解为ModPE的加载环境就好)的,所以没有得到类前缀,所以BlockHostObject中的函数也是最早的一批ModPE函数(诸如print、clientMessage),而后来随着函数的数量越来越多,之后添加的函数就被分至各个静态类下,然后以类的模式被放入,如NativeBlockApi,即ModPE的Block。
      NativeEntityApi对应的则是Entity,除此之外还有NativeGuiApi(虽然名为原生GUI,实际上只能获取屏幕宽高,并不能操作MinecraftPE的UI)、NativeItemApi、NativeLevelApi、NativeModPEApi、NativePlayerApi、NativeServerApi,以及很少用到的NativePointer(原生指针,它被创造出来的原因估计是为了对C/C++层传过来指针的一个封装,但实际上并没有起到方便的目的,因此Entity类中的Entity指针用的都是long)。


      来自Android客户端3楼2018-08-15 09:57
      回复
        【ModdedPE】
        可以说是目前市面上最良心的第三方启动器了,体积小的同时效果和BlockLauncher相同(只是没有了ModPE,实际上ModdedPE也有一个第三方库能够提供javascript的加载服务,这个库即是上文提到的功能拓展库Gridge),这里有必要提到InnerCore(内核启动器),其实我并不赞同把InnerCore归类为启动器,因为它基本上是内置了一个MinecraftPE,更像是整合包或是封装器,所以直接叫内核更为贴切,正因为内置了MinecraftPE这个原因,使得InnerCore的体积更大,但是从某种程度上来说,这种设计是经过了多方面考虑的,其中就包括版本专一性,即稳定在一个版本,针对其开发出的插件就不会存在版本差异问题,这是其一。其二,因为直接内置了MinecraftPE,所以能够更方便且更全面的对MinecraftPE进行修改,在便捷性上有所提高。
        ModdedPE参考的原型是BlockLauncher,它和BlockLauncher使用的是相同的设计模式(但在代码的架构上存在根本意义上的不同),因此它也是一款外置型启动器,并且它还支持第三方修改版、重签版、共存版等多种MinecraftPE的非官方变种版本。但是其最大的问题就是其作者ModelPart时间上、精力上、以及一小部分能力上的不足,因而导致了其并不乐观的现状。


        来自Android客户端4楼2018-08-15 09:57
        回复(4)
          看不懂


          IP属地:江苏来自Android客户端5楼2018-08-15 10:00
          回复
            终于


            IP属地:中国香港来自Android客户端7楼2018-08-15 10:06
            回复
              前排


              来自Android客户端8楼2018-08-15 10:16
              收起回复
                欢迎来Native MCPEServer使用Native Addons
                Niconiconi~


                来自WindowsPhone客户端9楼2018-08-15 10:20
                回复
                  2026-03-10 11:29:20
                  广告
                  不感兴趣
                  开通SVIP免广告
                  支持一下 完毕


                  IP属地:湖北来自手机贴吧10楼2018-08-15 10:25
                  回复
                    楼主 还有inner core


                    来自Android客户端12楼2018-08-15 11:08
                    回复
                      支持,我爱kokic


                      IP属地:美国来自Android客户端13楼2018-08-15 11:34
                      收起回复
                        支持


                        IP属地:北京来自Android客户端14楼2018-08-15 12:15
                        回复