.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
2015-06-10 08:51
381 查看
原文:.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包apk有几种方式可取
一、最简单的方法(类似我们的winfrom)
只要我们调试或者运行过项目,在项目下的bin debug下就有同名apk文件了(Eclipse)下是这样的。在Android下变成了\app\build\apk下了
当然我们不能把这个apk放在商店。没有签名会被人家的apk替换
二、签名发布
1.签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序
我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
我们直接来看Android Studio怎么打包一个签名的APK,可能和Eclipse有点区别
(1)Android Studio菜单Build->Generate Signed APK
![](http://images.cnitblog.com/i/439652/201405/161617592031539.png)
(2)新建一个key
![](http://images.cnitblog.com/i/439652/201405/161621408902433.png)
Key store path:密钥库文件的地址
Password/Confirm:密钥库的密码
Key:
Alias:密钥名称
Password/Confirm:密钥密码
Validity(years):密钥有效时间
First and Last Name:密钥颁发者姓名
Organizational Unit:密钥颁发组织
City or Locality:城市
Country Code(XX):国家
(3)next下一步
![](http://images.cnitblog.com/i/439652/201405/161623569212092.png)
(4)选择打包的路径OK
![](http://images.cnitblog.com/i/439652/201405/161624478598385.png)
三、反编译(整理于网络)
生成的APK是直接直接解压的
![](http://images.cnitblog.com/i/439652/201405/161628399531358.png)
就是少了源码部分。源码部分被归类到classes.dex里面去了,R类变成了resources.arsc了
下面来看看怎么反编译出这2个文件
首先要下载两个工具:dex2jar和JD-GUI
前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:
dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
具体步骤:
首先将apk解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;
解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录
运行
dex2jar.bat classes.dex
生成
classes.dex.dex2jar.jar
生成jar文件的截图如下:
![](http://images.cnitblog.com/i/439652/201405/161632316257501.gif)
运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了
一、最简单的方法(类似我们的winfrom)
只要我们调试或者运行过项目,在项目下的bin debug下就有同名apk文件了(Eclipse)下是这样的。在Android下变成了\app\build\apk下了
当然我们不能把这个apk放在商店。没有签名会被人家的apk替换
二、签名发布
1.签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序
我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
我们直接来看Android Studio怎么打包一个签名的APK,可能和Eclipse有点区别
(1)Android Studio菜单Build->Generate Signed APK
![](http://images.cnitblog.com/i/439652/201405/161617592031539.png)
(2)新建一个key
![](http://images.cnitblog.com/i/439652/201405/161621408902433.png)
Key store path:密钥库文件的地址
Password/Confirm:密钥库的密码
Key:
Alias:密钥名称
Password/Confirm:密钥密码
Validity(years):密钥有效时间
First and Last Name:密钥颁发者姓名
Organizational Unit:密钥颁发组织
City or Locality:城市
Country Code(XX):国家
(3)next下一步
![](http://images.cnitblog.com/i/439652/201405/161623569212092.png)
(4)选择打包的路径OK
![](http://images.cnitblog.com/i/439652/201405/161624478598385.png)
三、反编译(整理于网络)
生成的APK是直接直接解压的
![](http://images.cnitblog.com/i/439652/201405/161628399531358.png)
就是少了源码部分。源码部分被归类到classes.dex里面去了,R类变成了resources.arsc了
下面来看看怎么反编译出这2个文件
首先要下载两个工具:dex2jar和JD-GUI
前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:
dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
具体步骤:
首先将apk解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;
解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录
运行
dex2jar.bat classes.dex
生成
classes.dex.dex2jar.jar
生成jar文件的截图如下:
![](http://images.cnitblog.com/i/439652/201405/161632316257501.gif)
运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了
![](http://images.cnitblog.com/i/439652/201405/161634342181323.png)
相关文章推荐
- Android项目页面跳转小Demo
- .Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
- .Net 转战 Android 4.4 日常笔记(5)--新软件Android Studio 0.5.8安装与配置及问题解决
- android camera(四):camera 驱动 GT2005
- .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
- .Net 转战 Android 4.4 日常笔记(3)--目录结构分析
- .Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- .Net 转战 Android 4.4 日常笔记目录
- Android注入框架你应该知道的一切------打造自己的注入框架
- Android 开源框架Universal-Image-Loader完全解析
- android MediaPlayer 简记
- android中调用支付宝
- [Android] Android开发优化之——使用软引用和弱引用
- Android注入框架你应该知道的一切------打造自己的注入框架
- Android 模拟器测试远程服务器成功,但是到真机上测试一点反应没有的解决办法
- android屏幕适配
- android 实践问题记录- 2015/06/09
- android:imeOptions属性
- android activity生命周期