apktool 简单使用记录
修改APP:车来了
修改内容:首次启动引导页,中间的点素材修改、样式修改
修改前:未选中为白色,选中为蓝色,间距为5dip
修改后:未选中为红色,选中为黑色,间距为0
前后截图如下:

修改过程:
一、使用apktool反编译apk
apktool安装根据官网进行:https://ibotpeaches.github.io/Apktool/install/
具体操作:
0.首先确保使用java 1.8或以上
1.下载运行脚本并重命名为apktool.bat,下载地址(官网):https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat
2.下载最新的apktool并重命名为apktool.jar,下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads/
3.放在一个文件夹,双击运行apktool.bat,会输出用法
4.反编译apk,命令格式:apktool d [ apk文件名 ]
Apktool v2.4.0 - a tool for reengineering Android apk fileswith smali v2.2.6 and baksmali v2.2.6
Copyright 2014 Ryszard Wiśniewski <brut.alll@gmail.com>
Updated by Connor Tumbleson <connor.tumbleson@gmail.com> usage: apktool
-advance,--advanced prints advance information.
-version,--version prints the version then exits
usage: apktool if|install-framework [options] <framework.apk>
-p,--frame-path <dir> Stores framework files into <dir>.
-t,--tag <tag> Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
-f,--force Force delete destination directory.
-o,--output <dir> The name of folder that gets written. Default is apk.ou
t
-p,--frame-path <dir> Uses framework files located in <dir>.
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag <tag> Uses framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
-f,--force-all Skip changes detection and build all files.
-o,--output <dir> The name of apk that gets written. Default is dist/name
.apk
-p,--frame-path <dir> Uses framework files located in <dir>. For additional info, see: http://ibotpeaches.github.io/Apktool/
For smali/baksmali info, see: https://github.com/JesusFreke/smali C:\Users\Administrator>cd C:\Users\apk所在文件夹 C:\Users\apk所在文件夹>apktool d chelaile.apk
I: Using Apktool 2.4.0 on chelaile.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
S: WARNING: Could not write to (C:\Users\Administrator\AppData\Local\apktool\framework), using C:\Users\Administrator\AppData\Local\Temp\ instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
I: Loading resource table from file: C:\Users\Administrator\AppData\Local\Temp\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Baksmaling classes2.dex...
I: Baksmaling classes3.dex...
I: Baksmaling classes4.dex...
I: Baksmaling assets/AdDex.3.1.0.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
得到了文件夹chelaile,里面有如下文件:

二、寻找和修改
这里是纯粹的凭感觉在搞了
AndroidManifesr.xml 找到<category android:name="android.intent.category.LAUNCHER"/>
猜测启动页面应该是SplashActivity,将其作为本次修改的对象
=> SplashActivity.smali 找到sget p1, Ldev/xesam/chelaile/core/R$layout;->cll_act_splash:I
猜测对应布局文件为cll_act_splash
=> cll_act_splash.xml 发现用了自定义组件GuideView,而且默认设置为gone,在smali文件中有invoke-virtual {v0, v1}, Ldev/xesam/chelaile/app/module/func/GuideView;->setVisibility(I)V,进一步猜测是首次启动才会出现
=> GuideView.smali 找到sget p2, Ldev/xesam/chelaile/core/R$layout;->cll_act_guide:I,猜测对应布局文件为cll_act_guide.xml
=> cll_act_guide.xml里面三个ImageView,应该就是三个点,
根据android:src="@drawable/indicate_dot" 得到对应素材,直接做修改保存;
删除android:padding="5.0dip"(由于这里的修改引起了页面中其他元素在显示上也有变化)
三、重新打包
命令格式:apktool b [ 刚才得到的文件夹 ] -o [ 输出文件名 ]
C:\Users\apk所在文件夹>apktool b chelaile -o newcll.apk
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether sources has changed...
I: Smaling smali_assets folder into assets.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes2 folder into classes2.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes3 folder into classes3.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes4 folder into classes4.dex...
I: Checking whether resources has changed...
I: Building resources...
S: WARNING: Could not write to (C:\Users\Administrator\AppData\Local\apktool\framework), using C:\Users\Administrator\AppData\Local\Temp\ instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
W: warning: string 'cll_aboard_user_contribution_empty_desc' has no default translation.
W: warning: string 'rc_voice_dialog_cancel_send' has no default translation.
W: warning: string 'rc_voice_dialog_swipe' has no default translation.
W: warning: string 'rc_voice_dialog_time_short' has no default translation.
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
出现了一些warning,但是问题不大,第一次使用,就不怎么纠结他了
到这里得到了一个apk,但是不能用,需要签名才能正常安装
四、重新签名
用Auto-sign重新签名,这里参考了一个博客,原文链接:https://blog.csdn.net/sxk874890728/article/details/80486223
下载解压Auto-sign,得到的auto-sign文件夹下有以下文件

将上一步得到的newcll.apk拷贝到解压好的auto-sign文件夹下,执行命令:
java -jar signapk.jar testkey.x509.pem testkey.pk8 newcll.apk cll_signed.apk
就得到了最终可安装使用的apk
apktool 简单使用记录的更多相关文章
- 如果简单的记录,就可以为这个世界创造更多的财富,那么还有什么理由不去写博客呢? — 读<<黑客与画家>> 有感
上一次博文发文时间是2016.1.15,7个月已经过去了.最近读了一本<>的书,对我触动挺大的!里面有关于技术趋势的探讨,也有关于人生和财富的思考! 开始更新iOS122的文章的初衷是,聚 ...
- Python简单爬虫记录
为了避免自己忘了Python的爬虫相关知识和流程,下面简单的记录一下爬虫的基本要求和编程问题!! 简单了解了一下,爬虫的方法很多,我简单的使用了已经做好的库requests来获取网页信息和Beauti ...
- redis5.0.3单实例简单安装记录
redis5.0.3单实例简单安装记录 日常需要测试使用,索性记录下来,免得临时又麻烦的找资料. yum -y install make gcc-c++ cmake bison-devel ncurs ...
- Oracle触发器简单入门记录
写在前面: 最近,老项目新增了日报优化的需求,丽姐让我用触发器去实现当数据插入或者更新的时候,实现对日报表数据更新操作.嗯嗯嗯呢,之前学习数据库的时候,有碰到过触发器,但都是一跳而过,也没怎么去真正的 ...
- 27:简单错误记录SimpleErrorLog
题目描述 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: ...
- percona-toolkit 3.0.13 简单安装记录
percona-toolkit 3.0.13 简单安装记录 环境:centos6.x mysql:8.0.17 yum -y install perl-DBIyum -y install perl-D ...
- .Net写txt文件-简单的记录执行日志信息代码
在执行一些批量操作时,想记录一些执行日志信息,越简单方便越好啊.提供一个常用的简单方法,将信息记录在txt文件里: public static void log(string content, str ...
- 测试与开发如何有效沟通,QC11(HP ALM 11)的简单使用记录
笔者所在的项目组使用的缺陷管理工具是HP的QC11,作为测试人员,为了与开发一起跟随Bug的一生,简单的写了使用流程,这里记录一下,主要是让开发人员熟悉一下. 首先使用账户登录QC,如地址: http ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
随机推荐
- Masonry 抗压缩 抗拉伸
约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...
- Vue.js——60分钟组件快速入门
一.组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HT ...
- PAT1028:List Sorting
1028. List Sorting (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Excel ca ...
- Makefile基础---编译
首先写一个自己的库: #include "../MyAPI.h" #include <cstdlib> #include <ctime> int getRa ...
- awk 手册
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...
- 彻底弄懂HTTP缓存机制及原理
前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能. 但是对于很多前端 ...
- java 自定义的注解有什么作用
转自https://zhidao.baidu.com/question/1668622526729638507.html 自定义注解,可以应用到反射中,比如自己写个小框架. 如实现实体类某些属性不自动 ...
- substr函数的用法
敲了几个demo,结果如下 substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('1234567890',0,5) :返回结果为 '12345' *从字符串第一个字符开始截 ...
- css中常见margin塌陷问题之解决办法
塌陷问题 当两个盒子在垂直方向上设置margin值时,会出现一个有趣的塌陷现象. ①垂直并列 首先设置两个DIV,并为其制定宽高 1 /*HTML部分*/ 2 <body> 3 <d ...
- eShopOnContainers 知多少[7]:Basket microservice
引言 Basket microservice(购物车微服务)主要用于处理购物车的业务逻辑,包括: 购物车商品的CRUD 订阅商品价格更新事件,进行购物车商品同步处理 购物车结算事件发布 订阅订单成功创 ...