mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
Thirty profiles from the ES-DE batch, each source-verified by the session that wrote it and passing the schema and semantic checks. Five declare no files at all and say why in notes referenced to the code: NGP.emu, openbor, Plastic, Swan.emu and XeniOS. Twenty-eight files come with them, every one declared by the profile that needs it and matching the hash it declares, with no duplicate of anything already held: the NetherSX2 Turnip Classic assets, the Speccy machine ROMs, the Virtual Boy homebrew the app bundles, Snes9x EX+'s bundled game, and sixtyforce's Overrides.plist, which carries a size and no hash because the binary never checks one. supermodel gains the four data files it reads from its install tree, hakux marks its controller map unsourceable now that the asset manager is known to read inside the package, and nethersx2 sheds the two core aliases that belong to the Turnip profiles.
294 lines
13 KiB
YAML
294 lines
13 KiB
YAML
emulator: "SWF Player"
|
|
type: standalone
|
|
core_classification: launcher
|
|
source: "https://play.google.com/store/apps/details?id=com.issess.flashplayer"
|
|
upstream: closed-source
|
|
author: "issess.net"
|
|
profiled_date: "2026-08-12"
|
|
core_version: "1.90 free (build 507)"
|
|
display_name: "Adobe Flash (SWF Player)"
|
|
mode: standalone
|
|
cores:
|
|
- "swf-player"
|
|
- "SWF Player"
|
|
- "SWF-PLAYER"
|
|
systems:
|
|
- flash
|
|
|
|
notes: |
|
|
Android package com.issess.flashplayer, closed source, published on Google Play and
|
|
reached by ES-DE through its SWF-PLAYER find rule. The build read here is 1.90 free
|
|
(build 507), versionCode 507, arm64-v8a and armeabi-v7a, sha256
|
|
0a56e74d0f8bfdfbd984ce1b8aa2a700203fdd051f3aece3c95fb17f45d4383b, signed v1 and v2 with
|
|
the developer certificate O=issess.com, CN=issess, sha256
|
|
c3a222b4339f9dde3a770bc1d0ceb551fa96e554679cdbd2056aadd0f1b843c8. Line numbers below are
|
|
those of that package: jadx output for the classes, the shipped file itself for
|
|
contents.html. The paid package com.issess.flashplayerpro, the other entry of the same
|
|
find rule, is built from this class tree, its activity being spelled
|
|
com.issess.flashplayer.player.FlashPlayerActivity. No genuine copy of it was obtainable:
|
|
apkpure and apkcombo bounce the download of a paid app, apkvision holds none, mi9 serves
|
|
zero bytes and archive.org has no item for either package.
|
|
|
|
Two engines ship in the package, one activity each, both exported and both answering
|
|
android.intent.action.VIEW for application/swf, application/x-shockwave-flash and
|
|
video/x-flv. FlashPlayerActivity is labelled "SWF Player by Ruffle" and runs the movie
|
|
in a WebView; AirPlayerActivity is labelled "SWF Player by AdobeAIR", lives in a :air
|
|
process and drives a captive Adobe AIR runtime. ES-DE names the first one and passes the
|
|
movie as the content URI of its own provider, so it always gets the Ruffle engine.
|
|
ref: AndroidManifest.xml activity com.issess.flashplayer.player.FlashPlayerActivity and
|
|
.AirPlayerActivity, string play_ruffle_player, play_air_player, using_ruffle_plugin,
|
|
using_air_plugin
|
|
|
|
The movie itself never stays where the user put it. BaseActivity.E reads the intent Uri
|
|
through the content resolver, or opens the path directly for a file:// intent, and writes
|
|
the bytes twice: to <cache>/assetLoader/cached.swf for the WebView engine and to
|
|
<cache>/app/<uniqueappversionid>/assets/cached.swf for the AIR engine, next to a copy of
|
|
the bundled AIR descriptor. The AIR name is fixed because the descriptor declares
|
|
cached.swf as its initial window content. A run with no Uri falls back to the last_swf
|
|
preference.
|
|
ref: BaseActivity.java:607-654, BaseActivity.java:594-605 (uniqueappversionid),
|
|
a2/b.java:86-92 (asset copy), a2/b.java:115 (stream copy),
|
|
assets/META-INF/AIR/application.xml:28
|
|
|
|
The Ruffle engine serves everything over a virtual host. FlashPlayerActivity.g0 writes
|
|
<cache>/assetLoader/swf.html from the bundled contents.html template, substituting the
|
|
movie URL and the wmode, scale, quality, background and density preferences;
|
|
FlashPlayerActivity.h0 builds a WebViewAssetLoader on the domain localhost.issess.net
|
|
mapping /ruffle/ to the package assets and / to that cache directory; i0 then loads
|
|
https://localhost.issess.net/swf.html one second later. The template pulls
|
|
/ruffle/ruffle/ruffle.js, which resolves to assets/ruffle/ruffle.js, and declares the
|
|
movie as a plain <object type="application/x-shockwave-flash">, which the Ruffle polyfill
|
|
takes over. Ruffle is the web build, nightly 2024-08-26, commit
|
|
c869505e88f792b1b6691cd8d6f0185bde4c21b9. The player controls are JavaScript calls on
|
|
that object and the frame counter comes back through the CallJava bridge.
|
|
ref: FlashPlayerActivity.java:262-291, 293-310, 312-346, 154, 349-386,
|
|
a2/b.java:327-373, c1/i.java:22-40 (assets handler), c1/i.java:77-95 (cache handler),
|
|
assets/contents.html:28,35-49, assets/ruffle/ruffle.js versionName field
|
|
|
|
Nothing is read from outside the package. The one mention of Adobe's own player is a main
|
|
list row that opens market://details?id=com.adobe.flashplayer, a store link that loads no
|
|
file, and the "Flash Player Not Found!" branch with its CallJava.notInstalled callback is
|
|
the fallback content of the object element, reached only when neither a plugin nor the
|
|
polyfill claims it. No plugin binary, BIOS, firmware or key is named anywhere in the
|
|
class tree, and ES-DE's own table records no BIOS for this system.
|
|
ref: MainListFragment.java:360, a2/b.java:452-468 (market intent),
|
|
assets/contents.html:50-60, FlashPlayerActivity.java:179-183,
|
|
ES-DE ANDROID.md:928
|
|
|
|
files:
|
|
- name: ruffle.js
|
|
path: "assets/ruffle/ruffle.js"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 344533
|
|
md5: c0263e609d1aef85891d56d6467a429c
|
|
sha1: c58c63e0ae8396018fd71f0fa7ebd4f8eb4f139f
|
|
description: "Ruffle web loader and polyfill, nightly 2024-08-26"
|
|
note: >-
|
|
The only script the generated page includes. It replaces the shockwave-flash object
|
|
with a Ruffle player and selects one of the two cores below by WebAssembly feature
|
|
detection. Absent, nothing claims the object element and the page renders its fallback
|
|
content instead, which reports back through CallJava.notInstalled.
|
|
source_ref: "assets/contents.html:28, FlashPlayerActivity.java:305 (/ruffle/ mapped to the package assets)"
|
|
|
|
- name: "core.ruffle.1c418e86b251861b5eca.js"
|
|
path: "assets/ruffle/core.ruffle.1c418e86b251861b5eca.js"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
variant_group: "ruffle-core"
|
|
size: 90386
|
|
md5: 5b1d64812875a1341ebd2a611e9324a1
|
|
sha1: 0eabbed786f3b8e5656d123e9f4573f918ba63d8
|
|
description: "Ruffle core bindings, WebAssembly extensions build"
|
|
note: >-
|
|
Glue for the SIMD core, webpack module 791. Loaded on a device whose WebAssembly
|
|
engine carries the extensions, which is what is_wasm_simd_used reports back.
|
|
source_ref: "assets/ruffle/ruffle.js webpack module 791, assets/ruffle/core.ruffle.1c418e86b251861b5eca.js is_wasm_simd_used"
|
|
|
|
- name: "75a2b30a5d3fb1a3431d.wasm"
|
|
path: "assets/ruffle/75a2b30a5d3fb1a3431d.wasm"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
variant_group: "ruffle-core"
|
|
size: 13107470
|
|
md5: 834f85979115fd740943a782887d0ab0
|
|
sha1: d27da38e4d37727a44bf04d7690a09135fad7115
|
|
description: "Ruffle core, WebAssembly extensions build"
|
|
note: >-
|
|
The player itself for devices with the extensions. Its target features record simd128,
|
|
which the baseline build below does not carry.
|
|
source_ref: "assets/ruffle/ruffle.js webpack module 791"
|
|
|
|
- name: "core.ruffle.9fa2f1e6feaba5f6767a.js"
|
|
path: "assets/ruffle/core.ruffle.9fa2f1e6feaba5f6767a.js"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
variant_group: "ruffle-core"
|
|
size: 94169
|
|
md5: 5aee868a91c066cc15f8b06999af690b
|
|
sha1: 45815723a1bdf4229e289906bf4e52dbfd78da56
|
|
description: "Ruffle core bindings, baseline build"
|
|
note: >-
|
|
Glue for the core without WebAssembly extensions, webpack module 797. Loaded when the
|
|
device does not report them.
|
|
source_ref: "assets/ruffle/ruffle.js webpack module 797, assets/ruffle/core.ruffle.9fa2f1e6feaba5f6767a.js is_wasm_simd_used"
|
|
|
|
- name: "9541e862775deeb49470.wasm"
|
|
path: "assets/ruffle/9541e862775deeb49470.wasm"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
variant_group: "ruffle-core"
|
|
size: 13323601
|
|
md5: fe843bd0152c714f0449493b0193108f
|
|
sha1: fea8e60e86cba7a63258626b13e6adb69ed110f9
|
|
description: "Ruffle core, baseline build"
|
|
note: >-
|
|
The player itself for devices without the WebAssembly extensions.
|
|
source_ref: "assets/ruffle/ruffle.js webpack module 797"
|
|
|
|
- name: contents.html
|
|
path: "assets/contents.html"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 2421
|
|
md5: 39c997db73db15a6807b35f148fcc85a
|
|
sha1: 0aaf20633888d2d0a2da38e82773cb5d44e840eb
|
|
description: "Template of the page the WebView loads"
|
|
note: >-
|
|
Read from the assets on every launch and rewritten into
|
|
<cache>/assetLoader/swf.html with the movie URL and the display preferences
|
|
substituted. It carries the ruffle.js include and the object element. Unreadable, the
|
|
generator returns null and the WebView is pointed at a page with no movie in it.
|
|
source_ref: "a2/b.java:327-333, FlashPlayerActivity.java:276-291"
|
|
|
|
- name: application.xml
|
|
path: "assets/META-INF/AIR/application.xml"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 1377
|
|
md5: de36d0dc1b74a39be2313749138d4d00
|
|
sha1: bc283d9ad8ad3bb99b632ca5b194a5bf27df1c22
|
|
description: "Adobe AIR application descriptor, namespace 3.8"
|
|
note: >-
|
|
Copied out of the assets into <cache>/app/<uniqueappversionid>/assets/META-INF/AIR/
|
|
before the AIR engine starts, and read from there by the runtime. It declares
|
|
cached.swf as the initial window content, which is the name the movie is copied under,
|
|
plus fullscreen, gpu rendering and auto orientation.
|
|
source_ref: "BaseActivity.java:616-630, assets/META-INF/AIR/application.xml:19,27-35"
|
|
|
|
- name: libCore.so
|
|
path: "lib/arm64-v8a/libCore.so"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 20951456
|
|
md5: 7fa4474455635584fa683167ee7e948f
|
|
sha1: d6d91ca32cbceda054851e9aa78c2e9286bd8812
|
|
description: "Adobe AIR 51.1.1.3 captive runtime"
|
|
note: >-
|
|
The AIR player, loaded by path first and then by name from the package. The runtime is
|
|
captive: the wrapper classes live in the application's own dex and the library beside
|
|
them, so no separate AIR package is consulted. The armeabi-v7a build of the same
|
|
version is 14808220 bytes. Version read back from the library as "AND 51,1,1,3".
|
|
source_ref: "AndroidActivityWrapper.java:455-481, AirPlayerBaseActivity.java:59-70"
|
|
|
|
- name: libc++_shared.so
|
|
path: "lib/arm64-v8a/libc++_shared.so"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 1058904
|
|
md5: 77f7b0c9bba5c0b4c4339bc655d5613a
|
|
sha1: 8db47ede06074dec3fbc05b69eb75f8c1c5e71a8
|
|
description: "NDK C++ runtime for the AIR runtime"
|
|
note: >-
|
|
Named by the wrapper ahead of the runtime itself, by path and then by name, and listed
|
|
as a DT_NEEDED of libCore.so. The armeabi-v7a build is 657000 bytes.
|
|
source_ref: "AndroidActivityWrapper.java:459,472-478"
|
|
|
|
- name: libswfplayer.so
|
|
path: "lib/arm64-v8a/libswfplayer.so"
|
|
system: flash
|
|
required: true
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 3896
|
|
md5: 1301640830c754d20384243c97bd7854
|
|
sha1: 6118faa7947eb7abf4326f08f5ba94ab61e42808
|
|
description: "JNI library of the application"
|
|
note: >-
|
|
Loaded from the static initializer of the AIR activity's base class, so its absence
|
|
stops that activity from being created. It exports one symbol,
|
|
Java_com_issess_flashplayer_stringFromJNI, which nothing calls. The armeabi-v7a build
|
|
is 2688 bytes.
|
|
source_ref: "AirPlayerBaseActivity.java:31-33"
|
|
|
|
- name: sample1.swf
|
|
path: "assets/sample1.swf"
|
|
system: flash
|
|
required: false
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 5889
|
|
md5: 3d801b57e0b9e1a84d9cf28ef7505b3c
|
|
sha1: 5194da518b3bbc77204e481c2cfed0381cf5df41
|
|
description: "Sample movie"
|
|
note: >-
|
|
Unpacked into <cache>/assetLoader on the sample list screen, then opened through a
|
|
chooser like any other movie so either engine can take it.
|
|
source_ref: "SampleListFragment.java:65-81, 109-117"
|
|
|
|
- name: sample2.swf
|
|
path: "assets/sample2.swf"
|
|
system: flash
|
|
required: false
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 54675
|
|
md5: c583c7db1c5456c0d9307d5f510a63f0
|
|
sha1: bef0ab96169418441f43b9dae2ec92a990b89ade
|
|
description: "Sample movie"
|
|
note: >-
|
|
Unpacked and opened on the same path as sample1.swf.
|
|
source_ref: "SampleListFragment.java:65-81, 109-117"
|
|
|
|
- name: sample3.swf
|
|
path: "assets/sample3.swf"
|
|
system: flash
|
|
required: false
|
|
bundled: true
|
|
unsourceable: "ships inside the application package"
|
|
size: 23563
|
|
md5: 505834e937b0bd061695ff34f40301cb
|
|
sha1: f5992aebd3ba298f6564681592be8b4626e89158
|
|
description: "Sample movie"
|
|
note: >-
|
|
Unpacked and opened on the same path as sample1.swf.
|
|
source_ref: "SampleListFragment.java:65-81, 109-117"
|
|
|
|
exclusion_note: >
|
|
Four files the package carries are left out because no code path opens them. The assets
|
|
cached.swf, Hello2.swf and empty.html are named in no class; the cached.swf the AIR
|
|
runtime reads is the copy of the user's movie written into the cache, not the one in the
|
|
assets. libysshared.so, which exports only ysEncrypt and ysDecrypt, is loaded by nothing:
|
|
the three loadLibrary calls in the package name swfplayer, c++_shared and Core, no
|
|
library declares it as a DT_NEEDED, and its soname appears nowhere in the class tree. The
|
|
market link to com.adobe.flashplayer is not a dependency either, being an intent to the
|
|
store page rather than a load of Adobe's plugin.
|