1.11 Decompiling APK to Obtain Code & Resources
Category Android Basic Beginner Tutorial
Introduction to This Section
>
"Decompiling Apk," sounds sophisticated, but it's not. It involves using certain decompiling software to decompile our APK, thereby obtaining the program's source code, images, XML resources, and other files. Have you ever done this? Seeing someone else's app interface beautifully designed or liking their image assets, a simple way is to download their APK, change the file extension to xxx.zip, and then unzip it: The author unzipped an APK randomly:
>
We can open the res directory to get the image assets.
>
However, this method will only get bitmap files like .png or .jpg. If we want to view XML resources, they will appear as gibberish, and if we want to see the APK program's Java code, that won't work either, as they are all packaged into the classes.dex file! But decompiling can meet your needs. Also, do not use decompiling for illegal activities, such as repackaging someone else's APK with your signature and then publishing it to relevant markets... We are referring to others' code, not copying it entirely! Remember!
1. Three Tools to Prepare
>
-apktool: Retrieve resource files, extract image files, layout files, and some XML resource files.
-dex2jar: Decompile APK into Java source code (convert classes.dex into a jar file).
-jd-gui: View the jar file converted in step 2, i.e., view the Java files. For the convenience of readers, the three tools are bundled together and placed in the cloud drive. Those in need can download them: Three Decompiling Tools.zip
2. Using apktool to Decompile APK for Images and XML Resources:
>
After decompressing the downloaded apktool, we can see the following files (ignoring the two csdn files, one is the decompiled apk, and the other is the decompiled file):
apktool.bat d csdn.apk and press Enter:
Then you can see the generated csdn folder, which contains the resources we want.
3. Using dex2jar to Convert classes.dex into a jar File:
>
Decompress the downloaded dex2jar folder, copy the classes.dex from the decompressed apk to the directory where dex2jar.bat is located:
Open cmd, go to this directory, and type: d2j-dex2jar.bat classes.dex
Then we can see a jar package generated:
4. Using jd-gui to View Java Code in the jar Package:
>
Open the jd-gui folder,
Open the jar package converted in step 3, and we can see the code inside:
Summary of This Section
>
Well, the decompiling of APKs is introduced here. I believe you are eager to try it out. Go ahead and give it a try. Finally, a reminder: don't do anything bad! Respect others' labor! Also, the environment setup and some common development techniques in the first chapter are over. Starting from the next section, we will begin the second chapter of this tutorial series—learning about common UI controls in Android! Due to the large number of basic controls, it might be boring to learn them all at once, so I might write the tutorial in parallel, learning one control + a bit of other knowledge points every day. I need to think about it, stay tuned~ Thank you~
-1.0 Android Basic Beginner Tutorial
-1.0.1 2015 Latest Android Basic Beginner Tutorial Contents
-1.1 Background and System Architecture Analysis
-1.2 Development Environment Setup
-1.2.1 Using Eclipse + ADT + SDK to Develop Android APP
-1.2.2 Using Android Studio to Develop Android APP
-1.3 Solving SDK Update Issues
-1.4 Genymotion Emulator Installation
-1.5.1 Git Tutorial for Basic Local Repository Operations
-1.5.2 Git: Using GitHub to Build Remote Repository
-1.6 How to Play with the 9-Patch Image
-1.7 Interface Prototype Design
-1.8 Project Source Analysis (Various Files, Resource Access)
-1.9 Android Program Signing and Packaging
- 1.11 Decompiling APK to Obtain Code & Resources
-2.1 Concepts of View and ViewGroup
-2.2.1 LinearLayout (Linear Layout)
-2.2.2 RelativeLayout (Relative Layout)
-2.2.3 TableLayout (Table Layout)
-2.2.4 FrameLayout (Frame Layout)
-2.2.5 GridLayout (Grid Layout)
-2.2.6 AbsoluteLayout (Absolute Layout)
-2.3.1 TextView (Text Box) Detailed Explanation
-2.3.2 EditText (Input Box) Detailed Explanation
-2.3.5.RadioButton (Radio Button) & Checkbox (Checkbox)
-2.3.6 ToggleButton and Switch
-2.3.7 ProgressBar (Progress Bar)
-2.3.9 RatingBar (Star Rating Bar)
-2.4.1 ScrollView (Scroll Bar)
-2.4.2 Date & Time Components (Part 1)
-2.4.3 Date & Time Components (Part 2)
-2.4.5 Simple Usage of ListView
-2.4.6 BaseAdapter Optimization
-2.4.8 Solving ListView Checkbox Misalignment Issues
-2.4.9 ListView Data Update Issues
-2.5.0 Building a Reusable Custom BaseAdapter
-2.5.1 Implementing Multi-Layout ListView Items
-2.5.2 Basic Usage of GridView (Grid View)
-2.5.3 Basic Usage of Spinner (List Option Box)
-2.5.4 Basic Usage of AutoCompleteTextView (Auto-Complete Text Box)
-2.5.5 Basic Usage of ExpandableListView (Collapsible List)
-2.5.6 Basic Usage of ViewFlipper (Flip View)
-2.5.8 Detailed Explanation of Notification (Status Bar Notification)
-2.5.9 Detailed Explanation of AlertDialog (Dialog Box)
-2.6.0 Basic Usage of Other Common Dialogs
-2.6.1 Basic Usage of PopupWindow (Floating Box)
-2.6.3 Simple Usage of ViewPager
-2.6.4 Simple Usage of DrawerLayout (Official Side Menu)
-3.1.1 Event Handling Mechanism Based on Listening
-3.2 Event Handling Mechanism Based on Callback
-3.3 Analysis of Handler Message Passing Mechanism
- 3.4 TouchListener vs OnTouchEvent + Multi-touch
- 3.5 Listening to EditText Content Changes
- 3.6 Responding to System Settings Events (Configuration Class)
- 3.7 AsyncTask Asynchronous Tasks
- 3.8 Gestures
- 4.1.1 Activity Beginner
- 4.1.2 Activity Intermediate
- 4.1.3 Activity Advanced
- 4.2.1 Service Beginner
- 4.2.2 Service Intermediate
- 4.2.3 Service Advanced
- 4.3.1 BroadcastReceiver Beginner
- 4.3.2 BroadcastReceiver Intermediate
- 4.4.1 ContentProvider Beginner
- 4.4.2 ContentProvider Intermediate - Document Provider
- 4.5.1 Basic Usage of Intent
- 4.5.2 Passing Complex Data with Intent
- 5.1 Fragment Basic Overview
- 5.2.1 Fragment Example Detailed - Bottom Navigation Bar Implementation (Method 1)
- 5.2.2 Fragment Example Detailed - Bottom Navigation Bar Implementation (Method 2)
- 5.2.3 Fragment Example Detailed - Bottom Navigation Bar Implementation (Method 3)
- 5.2.4 Fragment Example Detailed - Bottom Navigation Bar + ViewPager Swipe to Switch Pages
- 5.2.5 Fragment Example Detailed - Simple Implementation of News (Shopping) App List Fragment
- 6.1 Data Storage and Access - File Storage and Reading/Writing
- 6.2 Data Storage and Access - SharedPreferences for Saving User Preferences
- 6.3.1 Data Storage and Access - Introduction to SQLite Database
- 6.3.2 Data Storage and Access - Further Exploration of SQLite Database
- 7.1.1 Android Network Programming Essentials and HTTP Protocol Study
- 7.1.2 Android HTTP Request Headers and Response Headers Study
- 7.1.3 Android HTTP Request Method: HttpURLConnection
- 7.1.4 Android HTTP Request Method: HttpClient
- 7.2.1 Android XML Data Parsing
- 7.2.2 Android JSON Data Parsing
- 7.3.1 Android File Upload
- 7.3.2 Android File Download (1)
- 7.3.3 Android File Download (2)
- 7.4 Android Calling WebService
- 7.5.1 WebView (Web View) Basic Usage
- 7.5.2 WebView and JavaScript Interaction Basics
- 7.5.3 WebView Considerations After Android 4.4
- 7.5.4 WebView File Download
- 7.5.5 WebView Cache Issues
- 7.5.6 WebView Handling Webpage Error Code Information
- 7.6.1 Socket Network Basics Preparation
- 7.6.2 TCP Protocol Based Socket Communication (1)
- 7.6.3 TCP Protocol Based Socket Communication (2)
- 7.6.4 UDP Protocol Based Socket Communication
- 8.1.1 13 Drawable Types in Android Summary Part 1
- 8.1.2 13 Drawable Types in Android Summary Part 2
- 8.1.3 13 Drawable Types in Android Summary Part 3
- 8.2.1 Bitmap (Bitmap) Full Analysis Part 1
- 8.2.2 Bitmap-induced OOM Issues
- 8.3.1 Detailed Explanation of Three Drawing Tool Classes
- 8.3.2 Drawing Class Practical Examples
- 8.3.3 Paint API - MaskFilter (Mask)
- 8.3.4 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 1)
- 8.3.5 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 2)
- 8.3.6 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 3)
- 8.3.7 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 4)
- 8.3.8 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 5)
- 8.3.9 Paint API - ColorFilter (Color Filter) (1/3)
- 8.3.10 Paint API - ColorFilter (Color Filter) (2/3)
- 8.3.11 Paint API - ColorFilter (Color Filter) (3/3)
- 8.3.12 Paint API - PathEffect (Path Effect)
- 8.3.13 Paint API - Shader (Image Rendering)
- 8.3.14 Paint Enum/Constant Values and ShadowLayer Shadow Effect
- 8.3.15 Paint API - Typeface (Font Style)
- 8.3.16 Canvas API Detailed Explanation (Part 1)
- 8.3.17 Canvas API Detailed Explanation (Part 2) Clipping Methods Collection
- 8.3.18 Canvas API Detailed Explanation (Part 3) Matrix and drawBitmapMesh
- 8.4.1 Android Animation Collection - Frame Animation
- 8.4.2 Android Animation Collection - Tween Animation
- 8.4.3 Android Animation Collection - Property Animation - Introduction
- 8.4.4 Android Animation Collection - Property Animation - Further Exploration
- 9.1 Playing Sound Effects with SoundPool (Duang~)
- 9.2 Playing Audio and Video with MediaPlayer
- 9.3 Taking Photos with Camera
- 9.4 Recording Audio with MediaRecord
- 10.1 TelephonyManager (Phone Manager)
- 10.2 SmsManager (SMS Manager)
- 10.3 AudioManager (Audio Manager)
- 10.4 Vibrator (Vibrator)
- 10.5 AlarmManager (Alarm Service)
- 10.6 PowerManager (Power Service)
- 10.7 WindowManager (Window Management Service)
- 10.8 LayoutInflater (Layout Service)
- 10.9 WallpaperManager (Wallpaper Manager)
- 10.10 Sensor Series (1) – Introduction
- 10.11 Sensor Series (2) – Orientation Sensor
- 10.12 Sensor Series (3) – Accelerometer/Gyroscope Sensor
- 10.12 Sensor Series (4) – Understanding Other Sensors
- 10.14 Introduction to Android GPS
- 11.0 Completion of the 2015 Latest Android Basic Beginner's Tutorial
- 12.1 Android Practice: DrySister Viewing Girls App (Version 1) – Project Setup and Simple Implementation
- 12.2 DrySister Viewing Girls App (Version 1) – 2. Parsing Backend Data
- 12.3 DrySister Viewing Girls App (Version 1) – 3. Image Loading Optimization (Writing an Image Cache Framework)
- 12.4 DrySister Viewing Girls App (Version 1) – 4. Adding Data Caching (Introducing SQLite)
- 12.5 DrySister Viewing Girls App (Version 1) – 5. Code Review, Adjustment, and Logging Class Writing
- 12.6 DrySister Viewing Girls App (Version 1) – 6. Icon Creation, Obfuscation, Signing and Packaging, APK Slimming, App Release