--- /home/fdroid/fdroiddata/tmp/ch.logixisland.anuto_30.apk +++ /home/fdroid/fdroiddata/tmp/sigcp_ch.logixisland.anuto_30.apk ├── /usr/lib/android-sdk/build-tools/debian/apksigner verify --verbose --print-certs {} │┄ error from `/usr/lib/android-sdk/build-tools/debian/apksigner verify --verbose --print-certs {}` (b): │┄ DOES NOT VERIFY │┄ ERROR: APK Signature Scheme v3 signer #1: APK integrity check failed. CHUNKED_SHA256 digest mismatch. Expected: <0aaf4c5d5a9d4d89710b8cd010f97aa3e02e08a481015892299f29b4d8d4367e>, actual: <8e00535a53da88f1947c7aa77d6dfc2f04d9e06affad92dd8299dd2c37446842> │┄ ERROR: APK Signature Scheme v3 signer #1: APK integrity check failed. VERITY_CHUNKED_SHA256 digest mismatch. Expected: <2d264f7e9238fee88502bc2e86788d54f8db5015388e7b2098a60b878d64fe181305600000000000>, actual: <80df5c04b93ad497b7eb5234012fe4efe37093aa84af1fb17e70fd675fe8f3e71305600000000000> │ @@ -1,17 +0,0 @@ │ -Verifies │ -Verified using v1 scheme (JAR signing): true │ -Verified using v2 scheme (APK Signature Scheme v2): true │ -Verified using v3 scheme (APK Signature Scheme v3): true │ -Verified using v4 scheme (APK Signature Scheme v4): false │ -Verified for SourceStamp: false │ -Number of signers: 1 │ -Signer #1 certificate DN: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK │ -Signer #1 certificate SHA-256 digest: 65197484d51b46703badc7ca3e45b3b3232fbfb483a6f5a20b5eff4e0583d5a5 │ -Signer #1 certificate SHA-1 digest: 6eb96ca99545cf9d4327454cdce713c6b45a1cd1 │ -Signer #1 certificate MD5 digest: 241cc1cdb07526284e3d875b359e3a1c │ -Signer #1 key algorithm: RSA │ -Signer #1 key size (bits): 2048 │ -Signer #1 public key SHA-256 digest: d59bd9dca09f8fe6d06e183344e3a9188699f4d27761acaf3368869959d2c132 │ -Signer #1 public key SHA-1 digest: e56e95e66b5bac9f16336087fa0f1835241a8e6b │ -Signer #1 public key MD5 digest: 8de704f3e77a69868b2146e08f3dd334 │ -WARNING: META-INF/com/android/build/gradle/app-metadata.properties not protected by signature. Unauthorized modifications to this JAR entry will not be detected. Delete or move the entry outside of META-INF/. ├── zipinfo {} │ @@ -1,10 +1,10 @@ │ Zip file size: 6296851 bytes, number of entries: 167 │ -rw-rw-rw- 0.0 unx 56 b- defN 81-Jan-01 01:01 META-INF/com/android/build/gradle/app-metadata.properties │ --rw-rw-rw- 0.0 unx 277340 b- defN 81-Jan-01 01:01 classes.dex │ +-rw-rw-rw- 0.0 unx 277324 b- defN 81-Jan-01 01:01 classes.dex │ -rw---- 0.0 fat 3676 b- defN 81-Jan-01 01:01 AndroidManifest.xml │ -rw---- 0.0 fat 8422 b- stor 81-Jan-01 01:01 res/--.ogg │ -rw---- 0.0 fat 29323 b- stor 81-Jan-01 01:01 res/00.png │ -rw---- 0.0 fat 21335 b- stor 81-Jan-01 01:01 res/0E.png │ -rw---- 0.0 fat 12161 b- stor 81-Jan-01 01:01 res/0x.png │ -rw---- 0.0 fat 3596 b- defN 81-Jan-01 01:01 res/18.xml │ -rw---- 0.0 fat 7120 b- defN 81-Jan-01 01:01 res/2D.json │ @@ -162,8 +162,8 @@ │ -rw---- 0.0 fat 83510 b- stor 81-Jan-01 01:01 res/z1.png │ -rw---- 0.0 fat 1868 b- stor 81-Jan-01 01:01 res/z9.png │ -rw---- 0.0 fat 2020 b- defN 81-Jan-01 01:01 res/zH.xml │ -rw---- 0.0 fat 93540 b- stor 81-Jan-01 01:01 resources.arsc │ -rw---- 2.0 fat 10551 b- defN 81-Jan-01 01:01 META-INF/F3DBFEDA.SF │ -rw---- 2.0 fat 1326 b- defN 81-Jan-01 01:01 META-INF/F3DBFEDA.RSA │ -rw---- 2.0 fat 10443 b- defN 81-Jan-01 01:01 META-INF/MANIFEST.MF │ -167 files, 6607638 bytes uncompressed, 6274473 bytes compressed: 5.0% │ +167 files, 6607622 bytes uncompressed, 6274454 bytes compressed: 5.0% ├── classes.dex │ ├── classes.jar │ │ ├── zipinfo {} │ │ │ @@ -1,11 +1,11 @@ │ │ │ Zip file size: 659625 bytes, number of entries: 394 │ │ │ ?rwxrwxr-x 2.0 unx 694 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/AnutoApplication.class │ │ │ ?rwxrwxr-x 2.0 unx 400 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/BuildConfig.class │ │ │ -?rwxrwxr-x 2.0 unx 13308 b- defN 80-Jan-01 00:00 ch/logixisland/anuto/GameFactory.class │ │ │ +?rwxrwxr-x 2.0 unx 13287 b- defN 80-Jan-01 00:00 ch/logixisland/anuto/GameFactory.class │ │ │ ?rwxrwxr-x 2.0 unx 1032 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/GameSettings.class │ │ │ ?rwxrwxr-x 2.0 unx 471 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/Preferences.class │ │ │ ?rwxrwxr-x 2.0 unx 343 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/R$array.class │ │ │ ?rwxrwxr-x 2.0 unx 1987 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/R$attr.class │ │ │ ?rwxrwxr-x 2.0 unx 3510 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/R$drawable.class │ │ │ ?rwxrwxr-x 2.0 unx 2886 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/R$id.class │ │ │ ?rwxrwxr-x 2.0 unx 679 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/R$layout.class │ │ │ @@ -389,8 +389,8 @@ │ │ │ ?rwxrwxr-x 2.0 unx 820 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/util/iterator/FilteringIterator.class │ │ │ ?rwxrwxr-x 2.0 unx 3503 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/view/game/GameActivity.class │ │ │ ?rwxrwxr-x 2.0 unx 4154 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/view/game/MenuActivity.class │ │ │ ?rwxrwxr-x 2.0 unx 4654 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/view/load/LoadGameActivity.class │ │ │ ?rwxrwxr-x 2.0 unx 3826 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/view/map/ChangeMapActivity.class │ │ │ ?rwxrwxr-x 2.0 unx 895 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/view/setting/SettingsActivity.class │ │ │ ?rwxrwxr-x 2.0 unx 1941 b- stor 80-Jan-01 00:00 ch/logixisland/anuto/view/stats/EnemyStatsActivity.class │ │ │ -394 files, 593610 bytes uncompressed, 583597 bytes compressed: 1.7% │ │ │ +394 files, 593589 bytes uncompressed, 583597 bytes compressed: 1.7% │ │ ├── ch/logixisland/anuto/GameFactory.class │ │ │ ├── procyon -ec {} │ │ │ │ @@ -111,31 +111,35 @@ │ │ │ │ private void initializeBusiness(final Context context) { │ │ │ │ this.mMapRepository = new MapRepository(); │ │ │ │ this.mSaveGameRepository = new SaveGameRepository(context); │ │ │ │ this.mScoreBoard = new ScoreBoard(this.mGameEngine); │ │ │ │ this.mTowerAging = new TowerAging(this.mGameEngine); │ │ │ │ this.mSpeedManager = new GameSpeed(this.mGameEngine); │ │ │ │ this.mTowerSelector = new TowerSelector(this.mGameEngine, this.mScoreBoard); │ │ │ │ - this.mGameLoader = new GameLoader(context, this.mGameEngine, this.mGamePersister, this.mViewport, this.mEntityRegistry, this.mMapRepository, this.mSaveGameRepository); │ │ │ │ - this.mHighScores = new HighScores(context, this.mGameEngine, this.mScoreBoard, this.mGameLoader); │ │ │ │ - this.mGameState = new GameState(this.mScoreBoard, this.mHighScores, this.mTowerSelector); │ │ │ │ + final GameLoader mGameLoader = new GameLoader(context, this.mGameEngine, this.mGamePersister, this.mViewport, this.mEntityRegistry, this.mMapRepository, this.mSaveGameRepository); │ │ │ │ + this.mGameLoader = mGameLoader; │ │ │ │ + final HighScores mHighScores = new HighScores(context, this.mGameEngine, this.mScoreBoard, mGameLoader); │ │ │ │ + this.mHighScores = mHighScores; │ │ │ │ + this.mGameState = new GameState(this.mScoreBoard, mHighScores, this.mTowerSelector); │ │ │ │ this.mWaveManager = new WaveManager(this.mGameEngine, this.mScoreBoard, this.mGameState, this.mEntityRegistry, this.mTowerAging); │ │ │ │ this.mGameSaver = new GameSaver(this.mGameEngine, this.mGameLoader, this.mGamePersister, this.mRenderer, this.mWaveManager, this.mScoreBoard, this.mSaveGameRepository); │ │ │ │ this.mTowerControl = new TowerControl(this.mGameEngine, this.mScoreBoard, this.mTowerSelector, this.mEntityRegistry); │ │ │ │ - this.mTowerInserter = new TowerInserter(this.mGameEngine, this.mGameState, this.mEntityRegistry, this.mTowerSelector, this.mTowerAging, this.mScoreBoard); │ │ │ │ - this.mTutorialControl = new TutorialControl(context, this.mTowerInserter, this.mTowerSelector, this.mWaveManager); │ │ │ │ + final TowerInserter mTowerInserter = new TowerInserter(this.mGameEngine, this.mGameState, this.mEntityRegistry, this.mTowerSelector, this.mTowerAging, this.mScoreBoard); │ │ │ │ + this.mTowerInserter = mTowerInserter; │ │ │ │ + this.mTutorialControl = new TutorialControl(context, mTowerInserter, this.mTowerSelector, this.mWaveManager); │ │ │ │ } │ │ │ │ │ │ │ │ private void initializeEngine(final Context context) { │ │ │ │ this.mViewport = new Viewport(); │ │ │ │ this.mEntityStore = new EntityStore(); │ │ │ │ this.mMessageQueue = new MessageQueue(); │ │ │ │ this.mGamePersister = new GamePersister(); │ │ │ │ - this.mFrameRateLogger = new FrameRateLogger(); │ │ │ │ - this.mRenderer = new Renderer(this.mViewport, this.mFrameRateLogger); │ │ │ │ + final FrameRateLogger mFrameRateLogger = new FrameRateLogger(); │ │ │ │ + this.mFrameRateLogger = mFrameRateLogger; │ │ │ │ + this.mRenderer = new Renderer(this.mViewport, mFrameRateLogger); │ │ │ │ this.mGameLoop = new GameLoop(this.mRenderer, this.mFrameRateLogger, this.mMessageQueue, this.mEntityStore); │ │ │ │ this.mThemeManager = new ThemeManager(context, this.mRenderer); │ │ │ │ this.mSoundManager = new SoundManager(context); │ │ │ │ this.mSpriteFactory = new SpriteFactory(context, this.mThemeManager); │ │ │ │ final SoundFactory mSoundFactory = new SoundFactory(context, this.mSoundManager); │ │ │ │ this.mSoundFactory = mSoundFactory; │ │ │ │ this.mGameEngine = new GameEngine(this.mSpriteFactory, this.mThemeManager, mSoundFactory, this.mEntityStore, this.mMessageQueue, this.mRenderer, this.mGameLoop); ├── smali/ch/logixisland/anuto/GameFactory.smali │ @@ -173,32 +173,28 @@ │ .line 141 │ new-instance v1, Lch/logixisland/anuto/business/game/HighScores; │ │ iget-object v2, v0, Lch/logixisland/anuto/GameFactory;->mGameEngine:Lch/logixisland/anuto/engine/logic/GameEngine; │ │ iget-object v3, v0, Lch/logixisland/anuto/GameFactory;->mScoreBoard:Lch/logixisland/anuto/business/game/ScoreBoard; │ │ - iget-object v4, v0, Lch/logixisland/anuto/GameFactory;->mGameLoader:Lch/logixisland/anuto/business/game/GameLoader; │ - │ - invoke-direct {v1, v9, v2, v3, v4}, Lch/logixisland/anuto/business/game/HighScores;->(Landroid/content/Context;Lch/logixisland/anuto/engine/logic/GameEngine;Lch/logixisland/anuto/business/game/ScoreBoard;Lch/logixisland/anuto/business/game/GameLoader;)V │ + invoke-direct {v1, v9, v2, v3, v10}, Lch/logixisland/anuto/business/game/HighScores;->(Landroid/content/Context;Lch/logixisland/anuto/engine/logic/GameEngine;Lch/logixisland/anuto/business/game/ScoreBoard;Lch/logixisland/anuto/business/game/GameLoader;)V │ │ iput-object v1, v0, Lch/logixisland/anuto/GameFactory;->mHighScores:Lch/logixisland/anuto/business/game/HighScores; │ │ .line 142 │ - new-instance v1, Lch/logixisland/anuto/business/game/GameState; │ - │ - iget-object v2, v0, Lch/logixisland/anuto/GameFactory;->mScoreBoard:Lch/logixisland/anuto/business/game/ScoreBoard; │ + new-instance v2, Lch/logixisland/anuto/business/game/GameState; │ │ - iget-object v3, v0, Lch/logixisland/anuto/GameFactory;->mHighScores:Lch/logixisland/anuto/business/game/HighScores; │ + iget-object v3, v0, Lch/logixisland/anuto/GameFactory;->mScoreBoard:Lch/logixisland/anuto/business/game/ScoreBoard; │ │ iget-object v4, v0, Lch/logixisland/anuto/GameFactory;->mTowerSelector:Lch/logixisland/anuto/business/tower/TowerSelector; │ │ - invoke-direct {v1, v2, v3, v4}, Lch/logixisland/anuto/business/game/GameState;->(Lch/logixisland/anuto/business/game/ScoreBoard;Lch/logixisland/anuto/business/game/HighScores;Lch/logixisland/anuto/business/tower/TowerSelector;)V │ + invoke-direct {v2, v3, v1, v4}, Lch/logixisland/anuto/business/game/GameState;->(Lch/logixisland/anuto/business/game/ScoreBoard;Lch/logixisland/anuto/business/game/HighScores;Lch/logixisland/anuto/business/tower/TowerSelector;)V │ │ - iput-object v1, v0, Lch/logixisland/anuto/GameFactory;->mGameState:Lch/logixisland/anuto/business/game/GameState; │ + iput-object v2, v0, Lch/logixisland/anuto/GameFactory;->mGameState:Lch/logixisland/anuto/business/game/GameState; │ │ .line 143 │ new-instance v1, Lch/logixisland/anuto/business/wave/WaveManager; │ │ iget-object v11, v0, Lch/logixisland/anuto/GameFactory;->mGameEngine:Lch/logixisland/anuto/engine/logic/GameEngine; │ │ iget-object v12, v0, Lch/logixisland/anuto/GameFactory;->mScoreBoard:Lch/logixisland/anuto/business/game/ScoreBoard; │ @@ -287,25 +283,23 @@ │ move-object/from16 v16, v2 │ │ invoke-direct/range {v10 .. v16}, Lch/logixisland/anuto/business/tower/TowerInserter;->(Lch/logixisland/anuto/engine/logic/GameEngine;Lch/logixisland/anuto/business/game/GameState;Lch/logixisland/anuto/engine/logic/entity/EntityRegistry;Lch/logixisland/anuto/business/tower/TowerSelector;Lch/logixisland/anuto/business/tower/TowerAging;Lch/logixisland/anuto/business/game/ScoreBoard;)V │ │ iput-object v1, v0, Lch/logixisland/anuto/GameFactory;->mTowerInserter:Lch/logixisland/anuto/business/tower/TowerInserter; │ │ .line 147 │ - new-instance v1, Lch/logixisland/anuto/business/game/TutorialControl; │ - │ - iget-object v2, v0, Lch/logixisland/anuto/GameFactory;->mTowerInserter:Lch/logixisland/anuto/business/tower/TowerInserter; │ + new-instance v2, Lch/logixisland/anuto/business/game/TutorialControl; │ │ iget-object v3, v0, Lch/logixisland/anuto/GameFactory;->mTowerSelector:Lch/logixisland/anuto/business/tower/TowerSelector; │ │ iget-object v4, v0, Lch/logixisland/anuto/GameFactory;->mWaveManager:Lch/logixisland/anuto/business/wave/WaveManager; │ │ - invoke-direct {v1, v9, v2, v3, v4}, Lch/logixisland/anuto/business/game/TutorialControl;->(Landroid/content/Context;Lch/logixisland/anuto/business/tower/TowerInserter;Lch/logixisland/anuto/business/tower/TowerSelector;Lch/logixisland/anuto/business/wave/WaveManager;)V │ + invoke-direct {v2, v9, v1, v3, v4}, Lch/logixisland/anuto/business/game/TutorialControl;->(Landroid/content/Context;Lch/logixisland/anuto/business/tower/TowerInserter;Lch/logixisland/anuto/business/tower/TowerSelector;Lch/logixisland/anuto/business/wave/WaveManager;)V │ │ - iput-object v1, v0, Lch/logixisland/anuto/GameFactory;->mTutorialControl:Lch/logixisland/anuto/business/game/TutorialControl; │ + iput-object v2, v0, Lch/logixisland/anuto/GameFactory;->mTutorialControl:Lch/logixisland/anuto/business/game/TutorialControl; │ │ return-void │ .end method │ │ .method private initializeEngine(Landroid/content/Context;)V │ .locals 10 │ │ @@ -341,23 +335,21 @@ │ new-instance v0, Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger; │ │ invoke-direct {v0}, Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger;->()V │ │ iput-object v0, p0, Lch/logixisland/anuto/GameFactory;->mFrameRateLogger:Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger; │ │ .line 100 │ - new-instance v0, Lch/logixisland/anuto/engine/render/Renderer; │ - │ - iget-object v1, p0, Lch/logixisland/anuto/GameFactory;->mViewport:Lch/logixisland/anuto/engine/render/Viewport; │ + new-instance v1, Lch/logixisland/anuto/engine/render/Renderer; │ │ - iget-object v2, p0, Lch/logixisland/anuto/GameFactory;->mFrameRateLogger:Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger; │ + iget-object v2, p0, Lch/logixisland/anuto/GameFactory;->mViewport:Lch/logixisland/anuto/engine/render/Viewport; │ │ - invoke-direct {v0, v1, v2}, Lch/logixisland/anuto/engine/render/Renderer;->(Lch/logixisland/anuto/engine/render/Viewport;Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger;)V │ + invoke-direct {v1, v2, v0}, Lch/logixisland/anuto/engine/render/Renderer;->(Lch/logixisland/anuto/engine/render/Viewport;Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger;)V │ │ - iput-object v0, p0, Lch/logixisland/anuto/GameFactory;->mRenderer:Lch/logixisland/anuto/engine/render/Renderer; │ + iput-object v1, p0, Lch/logixisland/anuto/GameFactory;->mRenderer:Lch/logixisland/anuto/engine/render/Renderer; │ │ .line 101 │ new-instance v0, Lch/logixisland/anuto/engine/logic/loop/GameLoop; │ │ iget-object v1, p0, Lch/logixisland/anuto/GameFactory;->mRenderer:Lch/logixisland/anuto/engine/render/Renderer; │ │ iget-object v2, p0, Lch/logixisland/anuto/GameFactory;->mFrameRateLogger:Lch/logixisland/anuto/engine/logic/loop/FrameRateLogger;