博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android apk打包及反编译
阅读量:7060 次
发布时间:2019-06-28

本文共 4643 字,大约阅读时间需要 15 分钟。


一、打包

1.Android程序编译、打包、签名、发布的三种方式

方式一:方式二:方式三:

 

2.Android编译、打包的步骤

第一步 生成R.java类文件: 

Eclipse中会自动生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java。

第二步 将.aidl文件生成.java类文件: 

Eclipse中自动生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件。

第三步 编译.java类文件生成class文件: 

Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件。

第四步 将class文件打包生成classes.dex文件: 

Eclipse中自动生成,ant和命令行使用android SDK提供的dx.bat命令行脚本生成classes.dex文件。

第五步 打包资源文件(包括res、assets、androidmanifest.xml等): 

Eclipse中自动生成,ant和命令行使用Android SDK提供的aapt.exe生成资源包文件。

第六步 生成未签名的apk安装文件: 

Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用android SDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。

第七步 对未签名的apk进行签名生成签名后的android文件: 

Eclipse中使用Android Tools进行签名,ant和命令行使用jdk的jarsigner对未签名的包进行apk签名。

 

 

 


 

二、反编译

阅读源码是最好的学习方法,下面我们以愤怒的小鸟为例,看看如何把一个android游戏反编译成可读的源码。

 

工具介绍:

 

1、apktool   这个工具用来解压xml文件

到 下载前两个文件,并解压到Android SDK的platform tools 目录。

在命令行里的用法: 

apktool d 你的apk.apk 解压到指定文件夹,例如:

apktool d F:\学习\android\反编译\愤怒的小鸟.apk F:\学习\android\反编译\愤怒的小鸟

 

<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="1620" android:versionName="1.6.2" android:installLocation="auto"  package="com.rovio.angrybirds"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:label="@string/app_name" android:icon="@drawable/icon" android:debuggable="false">
        <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:label="@string/app_name" android:name="com.rovio.ka3d.App" android:launchMode="singleTask" android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name="com.burstly.lib.component.networkcomponent.burstly.VideoPlayerActivity" android:configChanges="keyboard|keyboardHidden|orientation" />
        <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name="com.burstly.lib.component.networkcomponent.burstly.BurstlyFullscreenActivity" android:configChanges="keyboard|keyboardHidden|orientation" />
        <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation" />
        <provider android:name="com.greystripe.android.sdk.AdContentProvider" android:exported="false" android:multiprocess="true" android:authorities="com.rovio.ka3d.AdContentProvider" />
        <activity android:name="com.greystripe.android.sdk.AdView" android:configChanges="keyboard|keyboardHidden|orientation">
            <intent-filter>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.millennialmedia.android.MMAdViewOverlayActivity" />
        <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name="com.millennialmedia.android.VideoPlayer" android:configChanges="keyboard|keyboardHidden|orientation" />
        <supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" />
        <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name="com.burstly.lib.component.networkcomponent.jumptap.JumptapActivity" android:configChanges="keyboard|keyboardHidden|orientation" />
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8" />
</manifest>
这就是我们加压后的AndroidManifest文件,我们看到愤怒的小鸟总共有8个activity 
 

2、dex2jar  这个工具是将dex文件反编译成jar文件

 到下载这个工具,并将所有文件和文件夹加压到并Android SDK的platform tools 目录。

用法:

dex2jar F:\学习\android\反编译\classes.dex    这里是把dex文件反编译成jar文件,默认会在该目录生成一个classes_dex2jar.jar文件。

 

3、xjad 这个工具是将jar文件反编译成java文件

 这是一个可视化的将jar文件反编译成java文件的工具,直接反编译jar会自动生成一个包含java文件的文件夹。 

 

反编译apk文件,得到其源代码的方法!!

       dex2jar和JD-GUI这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享。

dex2jar下载地址:
JD-GUI下载地址:
windows版JD-GUI:
     Linux版JD-GUI:
1.首先找到Android软件安装包中的classes.dex
把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录。
windows系统下:
在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar

Ubuntu系统下:(3楼正解!)

在终端下定位到dex2jar.sh所在目录,运行

sh dex2jar.sh classes.dex

则可生成classes.dex.dex2jar.jar

3.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码

 

 愤怒的小鸟源码下载:

 

 

转载地址:http://pwfll.baihongyu.com/

你可能感兴趣的文章
VS2010与.NET4系列 24.使用Visual Studio2010固定项目和解决方案
查看>>
音乐天天听
查看>>
Android 权限大全
查看>>
Linux下元字符、正则表达式、扩展正则表达式应用
查看>>
ibm服务器报警指示灯含意
查看>>
Nginx Location简单语法与配置
查看>>
嵌入式C语言自我修养 06:U-boot镜像自拷贝分析:section属性
查看>>
nginx反向代理和认证反向代理
查看>>
《破阵子·程序人生》
查看>>
迭代算法求平方根
查看>>
generatorConfig.xml for mariadb
查看>>
netstat命令
查看>>
超全超实用的Javascript类库和jQuery插件大全之一:Web印刷排版
查看>>
Android自定义控件CustomView2 扩展控件、组合控件
查看>>
独立 View Composer 的硬件要求
查看>>
修改登陆Jenkins后session过期的时间
查看>>
导入的maven项目添加maven依赖
查看>>
bash实现“多进程”(转)
查看>>
用nginx搭建http透明代理
查看>>
linux一切皆文件
查看>>