smali修改Textview+smali常用语法

本文介绍了如何通过Smali修改Android应用中TextView的值,详细讲解了Smali语言的基础语法,包括方法表示、参数传递、字段声明等,并通过一个实例展示了Textview值的修改过程。同时,提到了Apktool反编译和重新打包的过程,以及签名安装的注意事项。
摘要由CSDN通过智能技术生成

Smali语言其实就是Davlik的寄存器语言;Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件的展示语言,我们可以通过分析修改Smali程序达到修改源程序的目的。

  下面给出修改一个android工程其中Textview的教程。


   如图,下面是android工程listedittest的目录:

              

 

               通过apktool反编译出来的Smali文件夹里面的目录

                

 

              先打开一个主类MainActivity.smali文件,先来浏览一下里面的语言,再来说说smali的语法规则:


.class public Lcom/myandroid/listedittest/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"


# static fields
.field static str:[Ljava/lang/String;


# instance fields
.field private bt_cancel:Landroid/widget/Button;

.field private bt_confirmdelete:Landroid/widget/Button;

.field private bt_deselectall:Landroid/widget/Button;

.field private bt_selectall:Landroid/widget/Button;

.field private checkNum:I

.field private list:Ljava/util/ArrayList;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/ArrayList",
            "<",
            "Ljava/util/HashMap",
            "<",
            "Ljava/lang/String;",
            "Ljava/lang/String;",
            ">;>;"
        }
    .end annotation
.end field

.field private lv:Landroid/widget/ListView;

.field private mAdapter:Lcom/myandroid/listedittest/MyAdapter;

.field private tv_show:Landroid/widget/TextView;


# direct methods
.method static constructor <clinit>()V
    .locals 3

    .prologue
    .line 30
    const/16 v0, 0xd

    new-array v0, v0, [Ljava/lang/String;

    const/4 v1, 0x0

    const-string v2, "data1"

    aput-object v2, v0, v1

    const/4 v1, 0x1

    const-string v2, "data2"

    aput-object v2, v0, v1

    const/4 v1, 0x2

    const-string v2, "data3"

    aput-object v2, v0, v1

    const/4 v1, 0x3

    const-string v2, "data4"

    aput-object v2, v0, v1

    const/4 v1, 0x4

    const-string v2, "data5"

    aput-object v2, v0, v1

    const/4 v1, 0x5

    const-string v2, "data6"

    aput-object v2, v0, v1

    const/4 v1, 0x6

    const-string v2, "7"

    aput-object v2, v0, v1

    const/4 v1, 0x7

    const-string v2, "data8"

    aput-object v2, v0, v1

    const/16 v1, 0x8

    const-string v2, "data9"

    aput-object v2, v0, v1

    const/16 v1, 0x9

    const-string v2, "data10"

    aput-object v2, v0, v1

    const/16 v1, 0xa

    const-string v2, "data11"

    aput-object v2, v0, v1

    const/16 v1, 0xb

    const-string v2, "data12"

    aput-object v2, v0, v1

    const/16 v1, 0xc

    const-string v2, "data13"

    aput-object v2, v0, v1

    sput-object v0, Lcom/myandroid/listedittest/MainActivity;->str:[Ljava/lang/String;

    return-void
.end method

.method public constructor <init>()V
    .locals 0

    .prologue
    .line 20
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void
.end method

.method static synthetic access$000(Lcom/myandroid/listedittest/MainActivity;)Ljava/util/ArrayList;
    .locals 1
    .parameter "x0"

    .prologue
    .line 20
    iget-object v0, p0, Lcom/myandroid/listedittest/MainActivity;->list:Ljava/util/ArrayList;

    return-object v0
.end method

.method static synthetic access$100(Lcom/myandroid/listedittest/MainActivity;)I
    .locals 1
    .parameter "x0"

    .prologue
    .line 20
    iget v0, p0, Lcom/myandroid/listedittest/MainActivity;->checkNum:I

    return v0
.end method

.method static synthetic access$102(Lcom/myandroid/listedittest/MainActivity;I)I
    .locals 0
    .parameter "x0"
    .parameter "x1"

    .prologue
    .line 20
    iput p1, p0, Lcom/myandroid/listedittest/MainActivity;->checkNum:I

    return p1
.end method

.method static synthetic access$108(Lcom/myandroid/listedittest/MainActivity;)I
    .locals 2
    .parameter "x0"

    .prologue
    .line 20
    iget v0, p0, Lcom/myandroid/listedittest/MainActivity;->checkNum:I

    add-int/lit8 v1, v0, 0x1

    iput v1, p0, Lcom/myandroid/listedittest/MainActivity;->checkNum:I

    return v0
.end method

.method static synthetic access$110(Lcom/myandroid/listedittest/MainActivity;)I
    .locals 2
    .parameter "x0"

    .prologue
    .line 20
    iget v0, p0, Lcom/myandroid/listedittest/MainActivity;->checkNum:I

    add-int/lit8 v1, v0, -0x1

    iput v1, p0, Lcom/myandroid/listedittest/MainActivity;->checkNum:I

    return v0
.end method

.method static synthetic access$200(Lcom/myandroid/listedittest/MainActivity;)V
    .locals 0
    .parameter "x0"

    .prologue
    .line 20
    invoke-direct {p0}, Lcom/myandroid/listedittest/MainActivity;->dataChanged()V

    return-void
.end method

.method static synthetic access$300(Lcom/myandroid/listedittest/MainActivity;)Landroid/widget/TextView;
    .locals 1
    .parameter "x0"

    .prologue
    .line 20
    iget-object v0, p0, Lcom/myandroid/listedittest/MainActivity;->tv_show:Landroid/widget/TextView;

    return-object v0
.end method

.method private dataChanged()V
    .locals 3

    .prologue
    .line 157
    iget-object v0, p0, Lcom/myandroid/listedittest/MainActivity;->mAdapter:Lcom/myandroid/listedittest/MyAdapter;

    invoke-virtual {v0}, Lcom/myandroid/listedittest/MyAd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值