apk添加toast弹窗

Smali 添加toast弹窗

1 反编译apk

在这里插入图片描述

利用apktool.jar在java环境中将hello_world.apk反编译,输出为桌面上的output_dir文件夹。命令为java -jar apktool.jar d hello_world.apk -o output_dir

在这里插入图片描述

文件夹如图所示。

2 利用jadx-gui寻找合适的添加地方

下载jadx-gui,该工具是将字节码变成java的图形化工具,可用来寻找修改的何时地方。

2.1 打开jadx

在这里插入图片描述

找到相应路径,打开jadx图形化工具,将反编译的文件夹拖进工具中。

2.2 找到修改地方

在这里插入图片描述

找到源代码中的androidx中组件活动的onCreate方法,在这里可以添加toast弹窗。

2.3 在反编译的文件夹中找到修改地方

在这里插入图片描述

按照jadx-gui中所找到的路径进入文件夹,找到相应的smali文件的onCreate方法,添加toast弹窗消息。路径如上图所示。

在这里插入图片描述

.method protected onCreate(Landroid/os/Bundle;)V
    .locals 1

    .line 149
    invoke-super {p0, p1}, Landroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V

    .line 150
    iget-object v0, p0, Landroidx/activity/ComponentActivity;->mSavedStateRegistryController:Landroidx/savedstate/SavedStateRegistryController;

    invoke-virtual {v0, p1}, Landroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V

    .line 151
    invoke-static {p0}, Landroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V

    .line 152
    iget p1, p0, Landroidx/activity/ComponentActivity;->mContentLayoutId:I

    if-eqz p1, :cond_0

    .line 153
    invoke-virtual {p0, p1}, Landroidx/activity/ComponentActivity;->setContentView(I)V

    :cond_0
    return-void
.end method

3 修改

.method protected onCreate(Landroid/os/Bundle;)V
    .locals 2

    .line 149
    invoke-super {p0, p1}, Landroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V

    .line 150
    iget-object v0, p0, Landroidx/activity/ComponentActivity;->mSavedStateRegistryController:Landroidx/savedstate/SavedStateRegistryController;

    invoke-virtual {v0, p1}, Landroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V

    .line 151
    invoke-static {p0}, Landroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V

    .line 152
    iget p1, p0, Landroidx/activity/ComponentActivity;->mContentLayoutId:I

    if-eqz p1, :cond_0

    .line 153
    invoke-virtual {p0, p1}, Landroidx/activity/ComponentActivity;->setContentView(I)V

    :cond_0

    .line 154
    const-string v1, "Hello, World!"
    const/4 v0, 0x1
    invoke-static {p0, v1, v0}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
    move-result-object v0
    invoke-virtual {v0}, Landroid/widget/Toast;->show()V

    return-void
.end method

onCreate 方法中添加显示 Toast 消息的代码。注意点

==1.==在 onCreate 方法中已经声明了一个本地变量 v0,但在后续代码中如果又重新使用了 v0 作为参数传递给 makeText 方法,这可能导致寄存器冲突。解决方法:在 onCreate 方法中声明一个新的本地变量,例如 v1,将要弹出的文本信息存储在其中。使用新的本地变量作为参数传递给 makeText 方法。

2..locals 2:表示该方法会使用到两个本地变量。因为用到的变量增加,所以这个也要加1。

4 重新打包为apk

在这里插入图片描述

用java -jar apktool.jar b output_dir命令将反编译修改后的文件夹重新打包为apk。

5 签名

在这里插入图片描述

keytool -genkeypair -alias roland.keystore -keyalg RSA -validity 500000 -keystore roland.keystorev生成密码库,密码库存储在桌面上。用jarsigner -verbose -keystore roland.keystore -signedjar test.apk output_dir/dist/hello_world.apk roland.keystore给打好包的hello_world.apk签名并保存为桌面上的test.apk

6 安装

在这里插入图片描述

在模拟器中安装成功!

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值