πŸ’» A cross-platform desktop application to identify libraries used inside an android application. Made possible by Compose Desktop ⚑

Overview

πŸš€ stackzy

Twitter: theapache64

A desktop app to analyse APK. Built using Compose desktop

✨ Demo

πŸ“½οΈ Usage

πŸ’» Install

Platform Download Status
Linux Download Button Experimental
Windows Download Button Experimental
MacOS Download Button Experimental

ℹ️ To run the jar, you need Java 15 or above. If you hate running jar, you can clone the repo and execute ./gradlew createDistributable to build executable for your system.

πŸ‹ Dependency

  • Java 8 or above

πŸ—οΈ ️ Built with

What How
🎭 User Interface Compose Desktop
πŸ— Architecture MVVM
🧠 Backend Retrosheet
πŸ’‰ DI Dagger2
πŸ› οΈ APK Decompiling ApkTool
β˜• Dex to Java jadx
πŸ›£οΈ Navigation Decompose
🌊 Async Coroutines + Flow
🌐 Networking Retrofit
πŸ“„ JSON Moshi
⌨️ Logging Arbor
πŸ’» ADB Adam
πŸ§ͺ Testing DaggerMock + JUnit

πŸ˜‚ Fun Facts

  • Stackzy uses a google sheet as the backend, thanks to Retrosheet

  • The initial name of Stackzy was Which Stack

  • Stackzy uses a gloabl caching mechanism, which works as a centralized caching system. Means, if someone decompiled WhatsApp, the next time you try to find the stack, it won't be decompiled and the result will be served from the cache.

πŸ™‡ Credits

  • Special thanks to @mikepenz for contributing 200+ libraries from his project AboutLibraries πŸ“š
  • Special thanks to @SpikeySanju for the beautiful design 😎
  • Icons are from flaticon.com
  • Illustrations are from evernote.design
  • Thanks to all amazing people at Twitter for inspiring me to continue the development of this project.

πŸ₯Ό Test

Before executing any test, ensure

  • A device has connected to the adb
  • a valid PLAY_API_GOOGLE_USERNAME and PLAY_API_GOOGLE_PASSWORD defined in your environment.

🀝 Contributing

❀ Show your support

Give a ⭐️ if this project helped you!

Patron Link Buy Me A Coffee

πŸ“ License

Copyright Β© 2021 - theapache64

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

This README was generated by readgen ❀

Comments
  • BadAuthentication on Login Attempt

    BadAuthentication on Login Attempt

    java --version: 15.0.2 stackzy version: 1.0.7

    Cool app and nice UI! But...

    Issue: Created new Google account as suggested but always get BadAuthentication status when trying to login.

    bug critical 
    opened by ErickSumargo 10
  • UberJar not working

    UberJar not working

    Describe the bug

    I've downloaded Stackzy-linux-x64-1.0.0.jar from the releases (v1.0.0-beta03) and executed with java -jar Stackzy-linux-x64-1.0.0.jar, but am getting below error

    Crashlog
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    	at java.base/sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:335)
    	at java.base/sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:268)
    	at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:273)
    	at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:230)
    	at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:759)
    	at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1038)
    	at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
    	at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:873)
    	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:807)
    	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
    	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
    	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
    	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    	at java.base/java.lang.Class.forName0(Native Method)
    	at java.base/java.lang.Class.forName(Class.java:427)
    	at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:760)
    	at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)
    
    

    To Reproduce Steps to reproduce the behavior:

    1. Download any uberjar from here
    2. Execute it using java -jar Stackzy-*.jar
    3. See error

    Expected behavior Should launch Stackzy window

    Screenshots

    image

    Desktop (please complete the following information):

    • OS: Ubuntu 16.04
    • Stackzy Version: v1.0.0-beta03

    Additional context Add any other context about the problem here.

    bug package-bug 
    opened by theapache64 9
  • Fix app crashes when emulator/device is selected

    Fix app crashes when emulator/device is selected

    While testing the app I found two bugs which was related to adb source selection. 1- Wrong cast apk source Steps:

    • Connect android device or Launch android emulator
    • Select pathway adb
    • Select device
    • Observe

    App is crashing with exception

     class com.theapache64.stackzy.model.AndroidDeviceWrapper cannot be cast to class com.theapache64.stackzy.data.local.AndroidDevice (com.theapache64.stackzy.model.AndroidDeviceWrapper and com.theapache64.stackzy.data.local.AndroidDevice are in unnamed module of loader 'app')
    

    The issue is we are casting to wrong type The fix is in commit: 7c9a7e115d1ff75f27414395825596b250527472

    2- AndroidApp with empty package name Steps:

    • Fix first bug
    • Connect android device or Launch android emulator
    • Select pathway adb
    • Select device
    • Observe

    App is crashing with exception

    Char sequence is empty.
    	at kotlin.text.StringsKt___StringsKt.first(_Strings.kt:71)
    	at com.theapache64.stackzy.model.AndroidAppWrapper.getAlphabet(AndroidAppWrapper.kt:28)
    

    The issue is pm list packages is returning string which ends with \n and when we split the string we create a package with empty string. The fix is in commit: 7c9a7e115d1ff75f27414395825596b250527472

    Unfortunate I was unable to add test for the SelectAppViewModel because unit test was failing with weird exception

    @Composable functions must be marked with the @Composable annotation
    
    opened by smellouk 4
  • Limitation of the global cache mechanism?

    Limitation of the global cache mechanism?

    Stackzy uses a gloabl caching mechanism, which works as a centralized caching system. Means, if someone decompiled WhatsApp, the next time you try to find the stack, it won't be decompiled and the result will be served from the cache.

    • What if the decompilation done was done long back, and the new requests with more recent APKs are also served with stale data.
    opened by Arunm619 3
  • Double-click on JAR doesn't launch the application

    Double-click on JAR doesn't launch the application

    Desktop (please complete the following information):

    • OS: macOS Big Sur
    • Version 11.2.3
    • I used it on M1 mac.

    Additional context Java sdk version is 16.0.1

    opened by sunxu3074 2
  • Use stackzy on MacOS,  did not analysis any library.

    Use stackzy on MacOS, did not analysis any library.

    Describe the bug the build with return: An unexpected error occurred while trying to open file /private/var/****/apk-tool.jar

    To Reproduce Steps to reproduce the behavior:

    1. Go to 'ADB, SELECT Nexus 5x, '
    2. Click on 'Musically, com.zhiliaoapp.musically'
    3. Waiting to build with
    4. See error: An unexpected error occurred while trying to open file /private/var/****/apk-tool.jar

    Expected behavior list all library of Musically app

    Actual behavior A clear and concise description of what actually happened.

    Screenshots

    Desktop (please complete the following information):

    • OS: [Mac mini]
    • Version [11.4 Big Sur]
    • java version: [1.8.0_141]
    • Nexus 5x: [Android 10, Pixel Experience OS]
    • stackzy version: [1.0.5]
    opened by xuwanjin 2
  • Suggestion for improvement in design

    Suggestion for improvement in design

    At bottom of decompiled library listing page there is sharp cut at bottom of the recycler view you can put gradient so fade at bottom side it will looks better. Here I am attaching your current page screenhot as well suggested design screenshot.

    CURENT SCREEN

    SUGGESTION

    enhancement ui 
    opened by devman007 2
  • Cache the APK to skip Downloading APK at client

    Cache the APK to skip Downloading APK at client

    Is your feature request related to a problem? Please describe. It will solve slow internet related problems

    Describe the solution you'd like APK should be downloaded to servers and results should be shared on clients. This will speed up the process and effective caching can help to display results with much ease.

    discussion 
    opened by mwshubham 1
  • Google Authentication Related Feature does not work

    Google Authentication Related Feature does not work

    Login When i tried to login, it shows snackbar with message "NeedsBrowser". image Then i check the logcat and it shows this log. image

    Register When i tried to register, the link that i got redirected at gives 404 error. image

    Additional Info: Tested both with released .msi in version 1.2.3 and the current master branch which built using IntelliJ. I am using Windows 11.

    opened by wiryadev 1
  • Incorrect flag in gradle.properties

    Incorrect flag in gradle.properties

    Build fails on macOS + JDK17 with exception:

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Unable to start the daemon process.
    This problem might be caused by incorrect configuration of the daemon.
    For example, an unrecognized jvm option is used.
    Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/7.1/userguide/gradle_daemon.html
    Process command line: /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/bin/java -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED -Xmx2048m -Dfile.encoding=UTF-8 -Duser.country=UA -Duser.language=en -Duser.variant -cp /Users/artemkalachyan/.gradle/wrapper/dists/gradle-7.1-bin/4pslxx9lrxt5svtz5wbnb6tkz/gradle-7.1/lib/gradle-launcher-7.1.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 7.1
    Please read the following process output to find out more:
    -----------------------
    Unrecognized VM option 'MaxPermSize=1024m'
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    

    after removing -XX:MaxPermSize=1024m from gradle.properties builds correctly.

    opened by Bringoff 0
Releases(1.2.5)
Owner
theapache64
theapache64
Briar-desktop - A desktop program for Briar, bringing secure messaging to your desktop and mobile devices

Briar Desktop A desktop program for Briar, bringing secure messaging to your des

Briar Project 16 Dec 17, 2022
A simple Snake application to demonstrate the use of Compose for Desktop platform with Kotlin

Snake App using Compose for Desktop A simple Snake desktop application to demonstrate the use of Compose UI toolkit for Desktop platform with Kotlin.

Serge Nino Martin Villasica 12 Nov 18, 2022
Test-compose-for-desktop - Hello World in Compose for Desktop

Testing Run from command line: ./gradlew run Regular build: ./gradlew packageUb

Sebastian 3 Sep 20, 2022
Snake-compose-for-desktop - Snake Game - implemented using Compose for Desktop

A Snake game, built with Compose for Desktop snake-compose-for-desktop is my imp

gnu 5 Feb 17, 2022
Easily adding gaps inside such as Columns and Rows for Jetpack Compose.

Compose Gap Easily adding gaps inside such as Columns and Rows for Jetpack Compose. Inspired by Flutter's Gap. Introduction When it comes to add empty

Daichi Furiya 28 Oct 1, 2022
OTPView is a view made in Jetpack compose. It is highly customisable and can be used to show OTP view with different length and shapes.

OTPView OTPView is a highly costumizable OTP view made in the Jetpack compose UI. Usage: CircleOtpView is a sample composable that calls the OtpView w

kunalsale 17 Aug 4, 2022
Resume of Louis CAD, made with Jetpack Compose. Supports the Web, Desktop, and Android.

ResumeComposition What This project is the source code of the resume/CV of Louis CAD. The latest PDF export is available here, it is ready to print. H

Louis CAD 22 Aug 14, 2022
Carol 12 Sep 25, 2022
FullMangement - an application that helps you manage your tasks effectively. built with the latest tachs like Compose UI, Jetpack libraries, and MVVM design pattern.

Full Management is an application that helps you manage your tasks effectively. built with the latest tachs like Compose UI, Jetpack libraries and MVVM design pattern.

Amr algnyat 4 Nov 1, 2022
An application that i developed with a aim of learning Jetpack compose and many other jetpack libraries

An application that i developed with a aim of learning Jetpack compose and many other jetpack libraries, The application make use of jikan Api which displays a list of animations,there more details and even trailers of the animations.

Odhiambo Brandy 10 Nov 23, 2022
Jetpack Compose based project, used to stress-testing compose features / integrations and explore non-trivial functionality

Project containing Jetpack Compose samples For pagination & network images it uses CATAAS. Known issues Navigation-Compose Issue with fast tapping on

Denis Rudenko 59 Dec 14, 2022
🎺 Orchestra is a collection of Android custom view compatible libraries for Jetpack Compose.

Orchestra ?? Jetpack Compose compatible libraries using Balloon, ColorPickerView, PowerSpinner. Balloon Add below codes to your root build.gradle file

Jaewoong Eum 408 Jan 4, 2023
Compose Curved-Scroll is an Android Jetpack Compose library made with ❀️

Compose-Curved-Scroll-library Compose Curved-Scroll is an Android Jetpack Compos

mohamed tamer 23 Aug 24, 2022
Jetpack Compose Boids | Flocking Insect 🐜. bird or Fish simulation using Jetpack Compose Desktop πŸš€, using Canvas API 🎨

?? ?? ?? Compose flocking Ants(boids) ?? ?? ?? Jetpack compose Boids | Flocking Insect. bird or Fish simulation using Jetpack Compose Desktop ?? , usi

Chetan Gupta 38 Sep 25, 2022
Exercising Compose for Desktop and Compose for Web (Canvas)

Compose Counting Grid A simple application to check Compose for Desktop and Compose for Web (Canvas) drawing speeds when drawing grids (or tables) wit

null 6 Nov 11, 2022
Lull is an Android mobile application made with Jetpack Compose, where you can download wallpapers.

Lull Lull is an Android mobile application made with Jetpack Compose, where you can download wallpapers. Table of Contents Features Screenshots Light

Simge Şengün 12 Oct 10, 2022
Simple application made using Compose Multiplatform, SQLDelight, Decompose.

Notes Simple application made using Compose Multiplatform, SQLDelight and Decompose. Screenshots: Video: TODO There is plans for adding next stuff: Te

Vadim Yaroschuk 20 Dec 23, 2022
WordleSolver - Wordle solving application made with Compose

WordleSolver Wordle solving application made with Compose for Desktop. Screensho

Marcin Wisniowski 16 Dec 2, 2022
πŸ”– A Quotes Application built to Demonstrate the Compose for Desktop UI

?? JetQuotes A Quotes Application built to Demonstrate the use of Jetpack Compose for building declarative UI in Desktop. Made with love ❀️ by Spikeys

Sanju S 60 Sep 9, 2022