前言
对象安利的《Dr. Stanley's House》系列游戏,前两作是Flash
的,可以在各种远古小游戏网站上找到,第三作是Adobe AIR
的,所以能找到的只有Android
和iOS
两个平台,那自然是找前者咯。
不过由于打包游戏距离现在快十年了,兼容性自然已经相当于没有了,毕竟Android
可不像Windows
那样搞屎山兼容。
所以自然的,安装之后就报错了:
Generated by AppErrorsTracking
Project Url: https://github.com/KitsunePie/AppErrorsTracking
===============
[Device Brand]: Xiaomi
[Device Model]: Redmi K20
[Display]: SKQ1.220303.001 test-keys
[Android Version]: 12
[API Version]: 31
[System Locale]: zh_CN
[Package Name]: air.com.jamesli.stanley3
[Error Type]: Jvm
[Crash Time]: 2023-01-16T18:34:57.251
[Stack Trace]:
java.lang.UnsatisfiedLinkError: No implementation found for void com.adobe.air.AIRWindowSurfaceView.nativeSurfaceCreated() (tried Java_com_adobe_air_AIRWindowSurfaceView_nativeSurfaceCreated and Java_com_adobe_air_AIRWindowSurfaceView_nativeSurfaceCreated__)
at com.adobe.air.AIRWindowSurfaceView.nativeSurfaceCreated(Native Method)
at com.adobe.air.AIRWindowSurfaceView.surfaceCreated(AIRWindowSurfaceView.java:721)
at android.view.SurfaceView.updateSurface(SurfaceView.java:1316)
at android.view.SurfaceView.lambda$new$0$SurfaceView(SurfaceView.java:182)
at android.view.SurfaceView$$ExternalSyntheticLambda2.onPreDraw(Unknown Source:2)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1093)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3535)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2333)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9111)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1200)
at android.view.Choreographer.doCallbacks(Choreographer.java:983)
at android.view.Choreographer.doFrame(Choreographer.java:909)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1182)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:211)
at android.os.Looper.loop(Looper.java:300)
at android.app.ActivityThread.main(ActivityThread.java:8236)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1046)
那么就想办法修修呗。
移植?
先是看了下安装包内的文件,按理来说这种跨平台打包的东西,应该能手动移植到其他平台?
里面的adobeair.vch
感觉是Adobe AIR
的项目索引之类的,然后assets
是素材,.swf
是逻辑代码。
但是很可惜,网上没找到太多的相关资料,只找到一个有类似想法的人提的问题,但没有人给出可行的方案:How to run an android Adobe AIR app on PC (without using emulators)? - user2375809。
拆东补西
但是在搜索这个报错的时候,发现了一篇看起来几乎和我当前状况一样的文章:让ps touch兼容9.0 - 琴梨梨OvO,于是照着博主的方法一步步尝试修复。
-
找到一个高版本Android可运行的、基于
Adobe AIR
的应用。这里我选择了找
PS CC(PS Touch)
的修复版本,因为网上资源比较多,挨个尝试即可。最终找到了这么个奇怪的版本: -
尝试替换
libCore.so
,为了保险起见,其实其他几个libso
我也对比了一下,不过确实就只有这个文件需要替换。 -
重新安装检查报错情况。
Generated by AppErrorsTracking Project Url: https://github.com/KitsunePie/AppErrorsTracking =============== [Device Model]: Redmi K20 [Display]: SKQ1.220303.001 test-keys [Stack Trace]: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'Xiaomi/cupid/cupid:12/SKQ1.211006.001/V13.0.30.0.SLCCNXM:user/release-keys' Revision: '0' ABI: 'arm' Timestamp: 2023-01-16 20:26:47.320312440+0800 Process uptime: 0s Cmdline: air.com.jamesli.stanley3 pid: 25306, tid: 25306, name: amesli.stanley3 >>> air.com.jamesli.stanley3 <<< uid: 10210 signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr -------- Abort message: 'No pending exception expected: java.lang.NoSuchMethodError: no static or non-static method "Lcom/adobe/air/AIRWindowSurfaceView;.nativeGetSoftKeyboardType()I" at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class) (Runtime.java:-2) at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:1121) at void java.lang.Runtime.load0(java.lang.Class, java.lang.String) (Runtime.java:927) at void java.lang.System.load(java.lang.String) (System.java:1620) at void com.adobe.air.AndroidActivityWrapper.LoadRuntimeLibraries() (AndroidActivityWrapper.java:1413) at void com.adobe.air.AndroidActivityWrapper.
(android.app.Activity) (AndroidActivityWrapper.java:240) at com.adobe.air.AndroidActivityWrapper com.adobe.air.AndroidActivityWrapper.CreateAndroidActivityWrapper(android.app.Activity, java.lang.Boolean) (AndroidActivityWrapper.java:222) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void air.com.jamesli.stanley3.AppEntry.createActivityWrapper(boolean) (AppEntry.java:627) at void air.com.jamesli.stanley3.AppEntry.onCreate(android.os.Bundle) (AppEntry.java:246) at void android.app.Activity.performCreate(android.os.Bundle, android.os.PersistableBundle) (Activity.java:8281) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:8245) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1341) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:3751) at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3945) at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:106) at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:135) at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:95) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2282) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106) at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:211) at void android.os.Looper.loop() (Looper.java:300) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8236) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:556) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1046) ' -
修补
dex
,这一步其实在PS CC
里面已经有前辈替我们完成了,所以咱们只需要将classes.dex
改为classes2.dex
然后把PS CC
里面的classes.dex
复制过来就行。 -
再次安装查看修复情况,发现成功打开。
修复成果
其实这次还是多亏了有前人栽树,我作为后人才能乘凉,不然的话,想要修复还是挺困难的。
Comments NOTHING