Android登录界面怎么编写 |
您所在的位置:网站首页 › 简易计算器android编写 › Android登录界面怎么编写 |
0x01 Android 编程---登录界面说明 这个是学编程的时候必须要学的,这次我们就不接数据库来操作。也没有注册界面,直接就是一个简单的登录界面。demo还是按照之前的改。恩,反正我会,我就要偷懒。 1.更改布局首先一个用户名的框框。 然后一个登录密码的框框。 然后还是一个登录按钮 预览一下我们的界面 好丑,做一个简单的调整,整体代码如下: 登录后复制恩,为了像一个登录界面,我把name也改了。 所以重新绑定。 这里涉及到一个知识点。java String 类型如何转换为int类型。简单的来说: Integer.parseInt();登录后复制就可以转换了这里突然想到万一不输入数字怎么办。恩,去改下规范。 登录后复制这里加了一行只允许输入数字。 测试分析嘛,很多次了。老规矩 1. Android Killer我们找到逻辑判断的地方$1 .class Lcom/example/hanlei/first_demo/MainActivity$1; .super Ljava/lang/Object; .source "MainActivity.java"# interfaces.implements Landroid/view/View$OnClickListener;# annotations.annotation system Ldalvik/annotation/EnclosingMethod; value = Lcom/example/hanlei/first_demo/MainActivity;->onCreate(Landroid/os/Bundle;)V.end annotation .annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x0 name = null .end annotation# instance fields.field final synthetic this$0:Lcom/example/hanlei/first_demo/MainActivity;# direct methods.method constructor (Lcom/example/hanlei/first_demo/MainActivity;)V .locals 0 .param p1, "this$0" # Lcom/example/hanlei/first_demo/MainActivity; .prologue .line 24 iput-object p1, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method# virtual methods.method public onClick(Landroid/view/View;)V .locals 4 .param p1, "v" # Landroid/view/View; .prologue .line 27 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 if-ne v0, v1, :cond_0 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V .line 31 :cond_0 return-void .end method登录后复制3.重点逻辑部分重点逻辑就是如何判断登录的部分 if-eqz v0, :cond_0 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 if-ne v0, v1, :cond_0 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V登录后复制我们看到了两个if语言整个逻辑就是先进行一个判断,然后进行另外一个判断。就是满足第一个if语句,然后满足第二个if语句才到结束。这些smali代码就是我们之前分析过很多次的语句,没有什么难的地方,都很简单的。 0x03 暴力美学我们来尝试破解。 方法 1思路既然有if语句进行判断,那我把if语句删了。编程现在这个样子: invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 这里删除if语句 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 这里删除if语句 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V .line 31 :cond_0 return-void登录后复制然后保存进行反编译。 安装测试不删除if语句,但是我更改if语句的逻辑。比如本来是相等才可以,我改成不相等就继续运行。 具体操作第一个判断语句是: if-eqz v0, :cond_0登录后复制if-eqz的含义就是 如果是0,就跳转到 cond_0 现在我们修改成: if-nez v0,:cond_0登录后复制if-nez的含义是,如果不是0,就跳转到cond_0 第二个判断语句是: if-ne v0, v1, :cond_0登录后复制if-ne的含义就是如果v0!=v1就跳转。现在我们改成: if-eq v0, v1, :cond_0登录后复制if-eq的含义就是如果相等再进行跳转。 测试测试成功,不想录图片了。 方法3思路既然最后一定要走的是第二个判断里的内容,那么我们使用goto语句直接进去不就好了。 首先设置一个 cond_1然后goto :cond_1 .method public onClick(Landroid/view/View;)V .locals 4 .param p1, "v" # Landroid/view/View; .prologue .line 27 goto :cond_1 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 if-ne v0, v1, :cond_0 :cond_1 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V .line 31 :cond_0 return-void .end method登录后复制测试结果测试成功。 结束语可能还有很多种绕过的方法,这里就不一一展示了。 0x04 优雅的登录思路既然是登录,那么必然就要有一个对比的存在,我只要知道是用什么去对比的,我把需要对比的东西进行输出,方便我们查看是不是更好呢。 代码分析 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0登录后复制这里很明显,用v0和v1进行比较,如果是就返回1,如果不是就返回0 const/16 v1, 0x208 if-ne v0, v1, :cond_0登录后复制定义一个v1寄存器,然后用v0和v1比较看是否一致如果一致就继续向下运行。 我们可以将0x208转换成密码的十进制形式后,再输入登录系统。当然这个是可有看到的密码,如果接入了数据库就会变成不可见的密码,到时候就可以进行动态调试来对密码进行一个输出了。 0x05 如何植入广告什么是广告?大神说过一句话叫做,和游戏无关的都是广告,我们普遍说的广告就是,一些恩,很烦人的东西。 植入广告的目的是什么?植入广告的目的主要是(1) 做推广(2)能赚到钱 植入广告原理分析用一个载体去承载广告,然后显示出来。使用的技术用静态布局,或者使用动态加载等方式。还是来看一下如果植入广告的具体操作吧。 市面上的广告有米广告有米广告,反正我被坑了整整两天,什么都没搞成功,还被折腾的够呛,不过虽然没有搞出什么成果来,但是对有米广告倒是有了一个很深的认识,这个坑人的东西,好气。最后我只是搞成功了一个这个东西。 先来说说,我遇到的坑。希望有人研究的时候可以节约时间。 Error:Execution failed for task ':processDebugManifest'. > [:YoumiSdk_v7.5.1_2018-01-16:] C:\Users\hanlei\Desktop\ls\YoumiAndroidSdk\demo\normaldemo\build\intermediates\exploded-aar\YoumiSdk_v7.5.1_2018-01-16\AndroidManifest.xml:23:3-29:15: Error: Invalid instruction 'targetApi', valid instructions are : REMOVE,REPLACE,STRICT登录后复制看到这个鬼东西了木有,网上搜索都说需要换一个sdk,但是官网只提供最新的sdk,或许是我没找到。果断换sdk。而且官方给的demo导入到Android Studio 里用不了,也是这个问题。解决方案:Androidmanifest.xml里加这一句,可能有用。 登录后复制毫不留情就出问题了。 Error:Execution failed for task ':app:processDebugManifest'. > [:YoumiSdk_v7.5.1_2018-01-16:] C:\Users\hanlei\Desktop\ls\YoumiAndroidSdk\demo\demo3\app\build\intermediates\exploded-aar\YoumiSdk_v7.5.1_2018-01-16\AndroidManifest.xml:23:3-29:15: Error: Invalid instruction 'targetApi', valid instructions are : REMOVE,REPLACE,STRICT登录后复制换个arr版本接着搞。 记得改配置文件 果然换了一个arr包马上就对了,太不友好了。 我们接着初始化。 广告嘛,配置权限权限扫描的才可以运行。 登录后复制ps应该同步做一件事情。应该在我的小本本上同步做一个记录。 添加v4包compile 'com.android.support:support-v4:xx.x.x'登录后复制这里的v4:xx.x.x一定要和上面的一致,直接看图: 以上就是Android登录界面怎么编写的详细内容,更多请关注php中文网其它相关文章! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |