diff --git a/.github/ISSUE_TEMPLATE/decompilation-error.md b/.github/ISSUE_TEMPLATE/decompilation-error.md index ea0433f9142288a3e21bf9d28a0a31217e7b01ae..ef763a65cc84b4d3bd3161833920cd863f4bb486 100644 --- a/.github/ISSUE_TEMPLATE/decompilation-error.md +++ b/.github/ISSUE_TEMPLATE/decompilation-error.md @@ -8,10 +8,9 @@ assignees: '' --- **Checks before report** -- [ ] check [latest unstable build](https://bintray.com/skylot/jadx/unstable/_latestVersion#files) (maybe issue already fixed) -- [ ] search existing issues by exception message - (for example `JadxRuntimeException: Can't find immediate dominator for block`) -- [ ] check [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) section on wiki +- check [latest unstable build](https://bintray.com/skylot/jadx/unstable/_latestVersion#files) (maybe issue already fixed) +- check [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) section on wiki +- search existing issues by exception message **Describe error** - provide full name of method or class with error diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000000000000000000000000000000000000..7c8d3f00201d33be28ee65c02d87ad7435ca35a8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,10 @@ +--- +name: Feature Request +about: Suggest an idea for jadx +title: "[feature]" +labels: new feature +assignees: '' + +--- + +*Describe your idea:* diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000000000000000000000000000000000..65dc0edf9ae0d29f33b28e6a92732f851d0f218b --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,5 @@ +:exclamation: Please review the [guidelines for contributing](../CONTRIBUTING.md#Pull-Request-Process) + +### Description +Please describe your pull request. +Reference issue it fix. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..984d217f30324adc7d865469e90ba8deceaa143d --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at skylot@gmail.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33048e83a521a6765eb93cf2c79056bd7bffcf08..561caed2a15801f72ff9348c088fa8d8c2a4f7df 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,34 @@ -# Contribution +# Contributing -To support this project you can: - - Post thoughts about new features/optimizations that important to you - - Submit bug using one of following patterns: - * Java code examples which decompiles incorrectly - * Error log and link to _public available_ apk file or app page on Google play +Please note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your interactions with the project. + +## Open Issue + +1. Before proceed please do: + - check [latest unstable build](https://bintray.com/skylot/jadx/unstable/_latestVersion#files) (maybe issue already fixed) + - check [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) section on wiki + - search existing issues by exception message + +2. Describe error + - provide full name of method or class with error + - provide full java stacktrace + + **Note**: no need to copy method fallback code (commented pseudocode) + - attach or provide link to apk file (double check apk version) + + **Note**: GitHub don't allow attach files with `.apk` extension, but you can change extension by adding `.zip` at the end :) + + +## Pull Request Process + +1. Please don't submit any code style fixes, dependencies updates or other changes which are not fixing any issues. + +1. Before open a PR please discuss the change you wish to make via issue. PR without corresponding issue will be rejected. + +1. Use only features and API from Java 8 or below. + +1. If possible don't add additional dependencies especially if they are big. + +1. Make sure your code is correctly formatted, see description here: [Code Formatting](https://github.com/skylot/jadx/wiki/Code-Formatting). + +1. Make sure your changes is passing build: `./gradlew clean build dist` diff --git a/README.md b/README.md index 574cf590ab7046e4993d09a59f9a2493a699066b..8fdd4c044facfef0f63f37fb642c10ab13b74238 100644 --- a/README.md +++ b/README.md @@ -10,52 +10,59 @@ Command line and GUI tools for produce Java source code from Android Dex and Apk files +**Main features:** +- decompile Dalvik bytecode to java classes from APK, dex, aar and zip files +- decode `AndroidManifest.xml` and other resources from `resources.arsc` +- deobfuscator included + +**jadx-gui features:** +- view decompiled code with highlighted syntax +- jump to declaration +- find usage +- full text search + +See these features in action here: [jadx-gui features overview](https://github.com/skylot/jadx/wiki/jadx-gui-features-overview) + + ![jadx-gui screenshot](https://i.imgur.com/h917IBZ.png) -### Downloads +### Download - latest [unstable build: ![Download](https://api.bintray.com/packages/skylot/jadx/unstable/images/download.svg) ](https://bintray.com/skylot/jadx/unstable/_latestVersion#files) - release from [github: ![Latest release](https://img.shields.io/github/release/skylot/jadx.svg)](https://github.com/skylot/jadx/releases/latest) - release from [bintray: ![Download](https://api.bintray.com/packages/skylot/jadx/releases/images/download.svg) ](https://bintray.com/skylot/jadx/releases/_latestVersion#files) After download unpack zip file go to `bin` directory and run: - `jadx` - command line version -- `jadx-gui` - graphical version +- `jadx-gui` - UI version On Windows run `.bat` files with double-click\ -**Note:** ensure you have installed Java 8 64-bit version - - -### Related projects: -- [PyJadx](https://github.com/romainthomas/pyjadx) - python binding for jadx by [@romainthomas](https://github.com/romainthomas) - - -### Building jadx from source +**Note:** ensure you have installed Java 8 or later 64-bit version. +For windows you can download it from [adoptopenjdk.net](https://adoptopenjdk.net/releases.html?variant=openjdk11&jvmVariant=hotspot#x64_win) (select "Install JRE"). + +### Install +1. Arch linux + ```bash + sudo pacman -S jadx + ``` +2. macOS + ```bash + brew install jadx + ``` + +### Build from source JDK 8 or higher must be installed: - - git clone https://github.com/skylot/jadx.git - cd jadx - ./gradlew dist +``` +git clone https://github.com/skylot/jadx.git +cd jadx +./gradlew dist +``` (on Windows, use `gradlew.bat` instead of `./gradlew`) Scripts for run jadx will be placed in `build/jadx/bin` and also packed to `build/jadx-.zip` -### macOS -You can install using brew: - - brew install jadx - -### Run -Run **jadx** on itself: - - cd build/jadx/ - bin/jadx -d out lib/jadx-core-*.jar - # or - bin/jadx-gui lib/jadx-core-*.jar - - ### Usage ``` jadx[-gui] [options] (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc) @@ -97,15 +104,18 @@ Example: These options also worked on jadx-gui running from command line and override options from preferences dialog ### Troubleshooting -##### Out of memory error: - - Reduce processing threads count (`-j` option) - - Increase maximum java heap size: - * command line (example for linux): - `JAVA_OPTS="-Xmx4G" jadx -j 1 some.apk` - * edit 'jadx' script (jadx.bat on Windows) and setup bigger heap size: - `DEFAULT_JVM_OPTS="-Xmx2500M"` +Please check wiki page [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) + +### Contributing +To support this project you can: + - Post thoughts about new features/optimizations that important to you + - Submit decompilation issues, please read before proceed: [Open issue](CONTRIBUTING.md#Open-Issue) + - Open pull request, please follow these rules: [Pull Request Process](CONTRIBUTING.md#Pull-Request-Process) + +### Related projects: +- [PyJadx](https://github.com/romainthomas/pyjadx) - python binding for jadx by [@romainthomas](https://github.com/romainthomas) --------------------------------------- *Licensed under the Apache 2.0 License* -*Copyright 2018 by Skylot* +*Copyright 2019 by Skylot*