逆向教程->在APP中添加提示框(2)

效果:
会弹出一个提示框,有跳转和取消两个钮。 
点击取消以后,无任何操作。
点击前往以后,会调用浏览器打开指定网址。

在启动页oncreate中添加:
        invoke-virtual {p0, v0}, L当前页面地址;->setContentView(I)V
        #v0是当前页面在public中的数值,p0无所谓,L路径要与当前java路径保持一致

    .line 16
    invoke-virtual {p0}, L当前页面地址;->Dialog2()V
        #p0不管,L路径要与当前java路径保持一致
        
在当前页面下添加虚函数(# virtual methods):
.method public Dialog2()V
    .locals 3

    .prologue
    .line 22
    new-instance v0, Landroid/app/AlertDialog$Builder;

    #v0=(UninitRef,Landroid/app/AlertDialog$Builder;);
    invoke-direct {v0, p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V

    .line 23
    .local v0, "builder":Landroid/app/AlertDialog$Builder;
    #v0=(Reference,Landroid/app/AlertDialog$Builder;);
    const/4 v1, 0x0

    #v1=(Null);
    invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/AlertDialog$Builder;

    .line 24
    const-string v1, "\u6e29\u99a8\u63d0\u793a"

    #v1=(Reference,Ljava/lang/String;);
    invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;

    .line 25
    const-string v1, "\u65e0\u63d0\u793a"

    invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;

    .line 26
    const-string v1, "\u524d\u5f80"

    new-instance v2, L当前页面地址$跳转;

    #v2=(UninitRef,L当前页面地址$跳转;);
    invoke-direct {v2, p0}, L当前页面地址$跳转;-><init>(L当前页面地址;)V

    #v2=(Reference,L当前页面地址$跳转;);
    invoke-virtual {v0, v1, v2}, Landroid/app/AlertDialog$Builder;->setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;

    .line 39
    const-string v1, "\u53d6\u6d88"

    new-instance v2, L当前页面地址$取消;

    #v2=(UninitRef,L当前页面地址$取消;);
    invoke-direct {v2, p0}, L当前页面地址$取消;-><init>(L当前页面地址;)V

    #v2=(Reference,L当前页面地址$取消;);
    invoke-virtual {v0, v1, v2}, Landroid/app/AlertDialog$Builder;->setNegativeButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;

    .line 47
    invoke-virtual {v0}, Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;

    move-result-object v1

    invoke-virtual {v1}, Landroid/app/AlertDialog;->show()V

    .line 48
    return-void
.end method



在启动页目录插入两个新文件:
MainActivity$1.smali
MainActivity$2.smali
#如果出现重名,则递进

MainActivity$1.smali文件内容:
.class L当前页面地址$跳转;
.super Ljava/lang/Object;
.source "MainActivity.java"

# interfaces
.implements Landroid/content/DialogInterface$OnClickListener;


# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = L当前页面地址;->Dialog2()V
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation


# instance fields
.field final synthetic this$0:L当前页面地址;


# direct methods
.method constructor <init>(L当前页面地址;)V
    .locals 0

    .prologue
    .line 1
    iput-object p1, p0, L当前页面地址$跳转;->this$0:L当前页面地址;

    .line 26
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    #p0=(Reference,L当前页面地址$跳转;);
    return-void
.end method


# virtual methods
.method public onClick(Landroid/content/DialogInterface;I)V
    .locals 3
    .param p1, "dialog"    # Landroid/content/DialogInterface;
    .param p2, "which"    # I

    .prologue
    .line 31
    new-instance v1, Landroid/content/Intent;

    #v1=(UninitRef,Landroid/content/Intent;);
    invoke-direct {v1}, Landroid/content/Intent;-><init>()V

    .line 32
    .local v1, "intent":Landroid/content/Intent;
    #v1=(Reference,Landroid/content/Intent;);
    const-string v2, "android.intent.action.VIEW"

    #v2=(Reference,Ljava/lang/String;);
    invoke-virtual {v1, v2}, Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;

    .line 33
    const-string v2, "需要跳转到的网页,U码"

    invoke-static {v2}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v0

    .line 34
    .local v0, "content_url":Landroid/net/Uri;
    #v0=(Reference,Landroid/net/Uri;);
    invoke-virtual {v1, v0}, Landroid/content/Intent;->setData(Landroid/net/Uri;)Landroid/content/Intent;

    .line 35
    iget-object v2, p0, L当前页面地址$跳转;->this$0:L当前页面地址;

    invoke-virtual {v2, v1}, L当前页面地址;->startActivity(Landroid/content/Intent;)V

    .line 36
    return-void
.end method


MainActivity$2.smali文件内容:
.class L当前页面地址$取消;
.super Ljava/lang/Object;
.source "MainActivity.java"

# interfaces
.implements Landroid/content/DialogInterface$OnClickListener;


# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = L当前页面地址;->Dialog2()V
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation


# instance fields
.field final synthetic this$0:L当前页面地址;


# direct methods
.method constructor <init>(L当前页面地址;)V
    .locals 0

    .prologue
    .line 1
    iput-object p1, p0, L当前页面地址$取消;->this$0:L当前页面地址;

    .line 39
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    #p0=(Reference,L当前页面地址$取消;);
    return-void
.end method


# virtual methods
.method public onClick(Landroid/content/DialogInterface;I)V
    .locals 0
    .param p1, "dialog"    # Landroid/content/DialogInterface;
    .param p2, "which"    # I

    .prologue
    .line 44
    invoke-interface {p1}, Landroid/content/DialogInterface;->dismiss()V

    .line 45
    return-void
.end method


实例下载方便比对:

http://pan.baidu.com/s/1dDCh8sT

这是一段 C++ 代码,以下是每行的解释: - `if(NULL != vl)`:如果 `vl` 不为空指针,则执行下面的代码块。 - `{`:代码块的开始。 - `//reverse start;`:注释,表示下面的代码是开始逆向处理。 - `if(rphead && ::is_open_reverse)`:如果 `rphead` 不为空并且全局变量 `::is_open_reverse` 为真,则执行下面的代码块。 - `{`:代码块的开始。 - `rphead->CdrRaw.ncdrid = cdrgetid(rphead->lcoreid);`:将 `rphead->lcoreid` 作为参数调用函数 `cdrgetid` 获得新的 CDR ID (`ncdrid`),并将其赋值给 `rphead->CdrRaw.ncdrid`。 - `rphead->CdrRaw.tstart.tm_cycles = rphead->tstart.tm_cycles;`:将 `rphead->tstart.tm_cycles` 的值赋值给 `rphead->CdrRaw.tstart.tm_cycles`,即将逆向处理的开始时间设置为原始处理的开始时间。 - `rphead->CdrRaw.cdrstat = PACKET_BEGIN;`:将 `rphead->CdrRaw.cdrstat` 的值设置为 `PACKET_BEGIN`,表示逆向处理的 CDR 状态为开始。 - `rphead->btCurStaus = PACKET_BEGIN;`:将 `rphead->btCurStaus` 的值设置为 `PACKET_BEGIN`,表示逆向处理的当前状态为开始。 - `pubSendPkt((void*)rphead);`:调用函数 `pubSendPkt` 发送 `rphead`,即逆向处理的 CDR。 - `vl->SetReverse(rphead->CdrRaw.ncdrid, rphead->CdrRaw.tstart.tm_cycles);`:调用 `vl` 对象的 `SetReverse` 函数,将逆向处理的 CDR ID 和开始时间存储到 `vl` 对象。 - `}`:代码块的结束。 - `return vl;`:返回 `vl` 对象。 总体来说,这段代码的作用是对一个 CDR 进行逆向处理,并将逆向处理的 CDR ID 和开始时间存储到一个对象。其 `rphead` 是一个指向 CDR 的指针,`vl` 是一个对象,`cdrgetid` 是一个函数,`pubSendPkt` 和 `SetReverse` 是两个函数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值