最近很多小伙伴都在问如何使用新的apk升级prevoiusapk而不会丢失android中未知资源apk的先前数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Androidad
最近很多小伙伴都在问如何使用新的apk升级prevoius apk而不会丢失android中未知资源apk的先前数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Android adb安装apk时提示Invalid APK file的问题、android apk 自我保护技术-加密apk、Android Apktool APK文件反编译、重编译、Android APK反编译 apktool使用教程等相关知识,下面开始了哦!
本文目录一览:- 如何使用新的apk升级prevoius apk而不会丢失android中未知资源apk的先前数据
- Android adb安装apk时提示Invalid APK file的问题
- android apk 自我保护技术-加密apk
- Android Apktool APK文件反编译、重编译
- Android APK反编译 apktool使用教程
如何使用新的apk升级prevoius apk而不会丢失android中未知资源apk的先前数据
如何使用新的apk在真实设备中丢失之前的apk数据来升级Android应用程序?
Android adb安装apk时提示Invalid APK file的问题
今天在使用adb命令安装apk时,无法安装成功,进入到android sdk 下的platform_tools下也是无法安装成功:
先贴一下我的调用过程
xu:~ xiaokai$ adb devices List of devices attached 0123456789ABCDEF device xu:~ xiaokai$ adb shell shell@T36DH_CM3:/ $ pm install /Users/xiaokai/Downloads/app-release.apk pkg: /Users/xiaokai/Downloads/app-release.apk Failure [INSTALL_FAILED_INVALID_URI] 1|shell@T36DH_CM3:/ $ adb install /Users/xiaokai/Downloads/app-release.apk Invalid APK file: /Users/xiaokai/Downloads/app-release.apk 255|shell@T36DH_CM3:/ $ exit xu:~ xiaokai$ adb install /Users/xiaokai/Downloads/app-release.apk [100%] /data/local/tmp/app-release.apk pkg: /data/local/tmp/app-release.apk Success
adb devices
首先调用了adb devices,查看有没有可用的手机,`0123456789ABCDEF device`说明有可用的手机,
adb shell
然后进入手机,安装apk,
pm install /Users/xiaokai/Downloads/app-release.apk
发现出现问题,
exit
退出前手机 ,进入root目录
adb install /Users/xiaokai/Downloads/app-release.apk
进行安装,发现安装成功,网上查了一下,下面这篇文章介绍了一些这方面的问题
补充上面文章:adb安装apk报错Failure [INSTALL_FAILED_INVALID_URI]
今天在使用adb命令安装一个apk时,遇到一个问题,记录如下:
1、下载了一个demo.apk,放在D:\A_Download目录下。
2、手机连上电脑,开启USB调试权限。然后在电脑端启动cmd,输入以下命令:
C:\Users\leon>adb devices List of devices attached 0123456789ABCDEF device
可以看出,手机已经成功连上。
3、输入adb shell命令,进入shell模式。然后使用install命令安装上述apk文件。但是提示失败:
C:\Users\leon>adb shell shell@android:/ $ install D:\A_Download\demo.apk BusyBox v1.20.2-jb bionic (2012-11-25 17:47 +0100) multi-call binary. Usage: install [-cdDsp] [-o USER] [-g GRP] [-m MODE] [SOURCE]... DEST Copy files and set attributes -c Just copy (default) -d Create directories -D Create leading target directories -s Strip symbol table -p Preserve date -o USER Set ownership -g GRP Set group ownership -m MODE Set permissions
分析了一下,原来是忘记使用pm前缀(关于install命令要加pm前缀的分析,请参见另一篇文章:安卓adb命令中pm工具的作用及用法详解)。于是修改命令:
shell@android:/ $ pm install D:\A_Download\demo.apk pkg: D:A_Downloaddemo.apk Failure [INSTALL_FAILED_INVALID_URI]
仍然提示失败!
经过反复的分析,我认为应该是因为adb命令下,无法识别windows目录信息导致。也就是说,adb命令无法识别此处的“D:\A_Download\demo.apk”目录。也正是因为这样,所以它给出的失败原因是INVALID_URI。
为了解决这个问题,其实办法很简单,只要退出adb shell的环境就好。于是输入exit命令回退到windows的cmd环境下,然后使用adb install命令,果然就成功了。
shell@android:/ $ exit C:\Users\leon>adb install D:\A_Download\demo.apk [100%] /data/local/tmp/demo.apk pkg: /data/local/tmp/demo.apk Success
当然,上述思路只是我自己想当然的,必须验证一下是否真是这么回事。怎么验证呢?
如上所述,根据我的猜测,上述安装方式之所以会失败,是因为adb环境无法识别windows系统的目录格式。所以,如果我们提前把文件拷贝到手机中,然后再进入adb shell环境并install,免去shell环境识别windows目录格式的步骤,应该就能成功。
于是,我直接在cmd环境下把apk文件push到手机中,然后进入adb shell环境,运行pm install命令,果然成功了!
C:\Users\leon>adb push D:\A_Download\demo.apk sdcard/demo.apk [100%] sdcard/demo.apk C:\Users\leon>adb shell shell@android:/ $ cd sdcard/ shell@android:/sdcard $ pm install demo.apk pkg: demo.apk Success
所以,总之一句话,adb shell环境下,系统无法识别windows的目录格式,要么就退回到cmd环境下,要么就提前把windows的文件拷贝到手机中。类似的问题就不会再出现了!
搞定,收工!
以上这篇Android adb安装apk时提示Invalid APK file的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
- adb通过wifi连接android设备流程解析
- Android adb命令中pm工具的作用及用法说明
- python中adb有什么功能
- Android user版通过adb_enable开启adb 调试 不提示对话框的流程分析
- 详解adb shell 常用命令
- Android PC端用ADB抓取指定应用日志实现步骤
- python+adb命令实现自动刷视频脚本案例
- 详解android adb常见用法
android apk 自我保护技术-加密apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法。前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blog/393372)和运行时修改字节码(http://my.oschina.net/u/2323218/blog/396203),如果有不明白的可以查看我的博客的前两篇中关于这两种技术的介绍。接下来我们将介绍另一种简单适用的防止apk反编译的技术-伪加密。
一、伪加密技术原理
我们知道android apk本质上是zip格式的压缩包,我们将android应用程序的后缀.apk改为.zip就可以用解压软件轻松的将android应用程序解压缩。在日常生活或者工作中,我们通常为了保护我们自己的文件在进行压缩式都会进行加密处理。这样的方法对于android apk同样适用。原理很简单,在zip的文件格式中有一个位用来标示该zip压缩文件中的文件是否被加密,我们只要找到该标志位将其置1就可以实现我们的目的。而android的包安装服务(PackageManagerService)在进行apk安装时并不关心这个加密位(暂时我们就这么叫它吧)可以进行正常的安装并且也不会影响apk的运行。
二、zip文件格式
zip的文件格式通常有三个部分组成:压缩文件源数据、压缩目录源数据、目录结束标识。这三个部分中和我们说的加密位有关的是压缩目录源数据部分,我们接下来详细介绍这一部分。
压缩目录源数据部分记录着所有的压缩目录源数据。其结构如下:
Central directory file header |
|
||
Offset |
Bytes |
Description[18] |
译 |
0 |
4 |
Central directory file header signature =0x02014b50 |
核心目录文件header标识=(0x02014b50) |
4 |
2 |
Version made by |
压缩所用的pkware版本 |
6 |
2 |
Version needed to extract (minimum) |
解压所需pkware的最低版本 |
8 |
2 |
General purpose bit flag |
通用位标记 |
10 |
2 |
Compression method |
压缩方法 |
12 |
2 |
File last modification time |
文件最后修改时间 |
14 |
2 |
File last modification date |
文件最后修改日期 |
16 |
4 |
CRC-32 |
CRC-32算法 |
20 |
4 |
Compressed size |
压缩后大小 |
24 |
4 |
Uncompressed size |
未压缩的大小 |
28 |
2 |
File name length (n) |
文件名长度 |
30 |
2 |
Extra field length (m) |
扩展域长度 |
32 |
2 |
File comment length (k) |
文件注释长度 |
34 |
2 |
Disk number where file starts |
文件开始位置的磁盘编号 |
36 |
2 |
Internal file attributes |
内部文件属性 |
38 |
4 |
External file attributes |
外部文件属性 |
42 |
4 |
Relative offset of local file header. This is the number of bytes between the start of the first disk on which the file occurs, and the start of the local file header. This allows software reading the central directory to locate the position of the file inside the ZIP file. |
本地文件header的相对位移。 |
46 |
n |
File name |
目录文件名 |
46+n |
m |
Extra field |
扩展域 |
46+n+m |
k |
File comment |
文件注释内容 |
该结构中的General purpose bit flag部分的第0位如果置1,标识该压缩包被加密;置为0标识该压缩包没有被加密。
三、具体实施
我们可以利用ZipCenOp.jar这个jar包对apk进行加密和解密操作(也有用python实现这个操作的这里我们不做介绍)。
(1)对apk进行加密
加密后,我们用解压缩软件进行解密会看如下的提示信息:
用apktool进行反编译会提示如下的错误信息:
加密后apk是可以正常的安装和运行的。
(2)对apk进行解密
解密对我们来说没有多大的用途,只是了解一下。
根据上面的讲述相信大家对apk的伪加密技术有了一定的了解,不过这种方法对于android 4.2.x版本及以后系统已经不适用了它会拒绝这种加密apk的安装。下一篇我们将讲解另一种android apk防止反编译技术,期待大家的捧场。
感谢您的阅读,期待下次与您见面:
如果对这篇讲的技术有任何疑问及想要获得这篇文章讲的技术的工具,第一时间获得文章更新,每天发布一篇技术大牛的原创文章,更多技术信息分享。
欢迎关注个人微信公众平台:程序员互动联盟,扫一扫下方二维码或搜索微信号coder_online即可关注,在线帮您解决技术难点,给大牛直接出难题。
Android Apktool APK文件反编译、重编译
一、参考文章
- https://www.jianshu.com/p/37f6e5b50aaa
- https://blog.csdn.net/qq_32452623/article/details/54291412
- https://blog.csdn.net/linchaolong/article/details/51146492
二、Apktool下载与使用
- 下载地址:https://ibotpeaches.github.io/Apktool/
- 注意:确保本机已经安装 JAVA 8 以上
1.下载后,如果是带版本号的apktool 2.4.1.jar为例,更名为apktool.jar;
2.打开cmd进入目标文件夹,使用以下命令进行反编译;
apktool d -f <apk_path> -o <outfile_path>
栗子:
java -jar apktool.jar d -f HKService1.apk -o TEST
3.输出如下;
TEST输出文件夹;
Android APK反编译 apktool使用教程
下载apktool:https://ibotpeaches.github.io/Apktool/install/
根据文档操作下载,命名等
工具介绍:
apktool
作用:主要查看res文件下xml文件、AndroidManifest.xml和图片。(注意:如果直接解压.apk文件,xml文件打开全部是乱码)
dex2jar
作用:将apk反编译成Java源码(classes.dex转化成jar文件)
jd-gui
作用:查看APK中classes.dex转化成出的jar文件,即源码文件
资源文件的反编译
安装方法:
win7:把上面两个文件都放到C://Windows下面
mac:
将上面下载的apktool.jar和apktool拷贝到/usr/local/bin
cp apktool.jar apktool /usr/local/bin
root权限:
chmod +x /usr/local/bin apktool.jar apktool
terminal运行apktool,出现版本号,代表,安装成功。
用法:
win7: 运行CMD,进入比如app-release.apk所在目录,然后运行apktool d app-release.apk就可以了,默认解压的文件就在app-release.apk所在目录
mac:terminal运行到apk目录,然后运行apktool d app-release.apk就可以了,默认解压的文件就在app-release.apk所在目录
java代码的反编译
dex2jar下载: https://sourceforge.net/projects/dex2jar/files/
JD-GUI下载:http://jd.benow.ca/
- 将apk 变成zip,解压出来,将需要反编译的dex文件(这里是classes.dex)复制到 dex2jar 解压目录下
- 打开命令行进入 d2j-dex2jar.bat 文件所在目录,输入命令 d2j-dex2jar.bat classes.dex
- 此时可以看到目录中多出了classes-dex2jar.jar文件
- 双击运行 jd-gui.exe 文件,将jar文件拖到工作区即可打开
今天关于如何使用新的apk升级prevoius apk而不会丢失android中未知资源apk的先前数据的讲解已经结束,谢谢您的阅读,如果想了解更多关于Android adb安装apk时提示Invalid APK file的问题、android apk 自我保护技术-加密apk、Android Apktool APK文件反编译、重编译、Android APK反编译 apktool使用教程的相关知识,请在本站搜索。
本文标签: