废话不多说了,直接上才艺吧。这次我手把手教你操作apk,可以学到如何将apk完整内置,编辑apk。
排除干扰项,我直接用我之前一个开源项目做样本,样本下载地址,下载里面的 app_debug.apk
。
内置apk
下面讲解的方法是以aar的方式内置,apk本质上和aar可以说没什么大区别,简单做一下转换就可以把apk变为aar的方式内置,下面直接操作。
打开Android Studio,新建项目,选择No Activity,之后一路默认,不用选择Kotlin,选择也可以,我是这个版本
创建完就是下面这个样子,再创建个Module,有人不知道为什么创建Module ? Module可以直接生成aar,为了留给你实操的空间,我不创建Module了,直接在app模块中操作。
简单操作一下这个空项目,把依赖全部移除掉,为什么移除掉?因为完整apk已经具备全部环境了,就使用它的环境就可以。包括Android X配置也都可以移除,不移除也可以,什么情况下可以不移除,保留实操空间。
下面开始正式操作apk,需要一个工具,我将它开源了,点这看源码
简单介绍一下apk构成,由两部分构成
- 代码,包括class代码,表现为dex;包括native代码,表现为so
- 资源,包括res文件夹,AndroidManifest.xml,和assets文件夹
我们的操作很简单,把dex转为jar集成,把各种xml反编译直接放到AS新建项目内,把so放到jniLibs下,assets有的话直接覆盖。
- 反编译apk,得到资源文件
反编译后查看 apktool.yml
取得minSdk,将空项目minSdk改为同样值。
- 取得资源后,将资源文件覆盖到新建项目内
3.将dex转为jar,so直接放到jniLibs下
用压缩软件打开apk文件,取得其中的dex文件,用反编译软件将dex转成jar。
转完之后,将jar包依赖到项目,也就是放到libs目录下,同时增加如下配置,然后Sync项目:
implementation fileTree(include: ['*.jar'], dir: 'libs')
lib下的so文件对应放到新建的jniLibs下
4.处理一下现有错误,报错的大多可以删除,部分根据提示修改,然后就可以直接运行项目了
哪里报错删哪里:
其他的不截图了,到这里报错的全删除,到了这里:
解决办法是删除classes3.jar里的BuildConfig文件,删另外一个也行
不出意外的话到这里apk已经可以运行起来了
但是不幸的是,运行报错了
通过查看发现是调用的R获取的drawable,那么显然是编译的问题,内部资源和已编译的资源无法对应。
到这里就涉及到第二个技能,修改原apk代码。其实非常简单,创建同名文件,替换内部代码。
进行到这里之后,整个修改就算是完成了。