中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android登錄界面怎么編寫

發布時間:2022-01-12 16:14:03 來源:億速云 閱讀:178 作者:iii 欄目:網絡安全

本篇內容介紹了“Android登錄界面怎么編寫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

0x01 Android 編程---登錄界面

說明

這個是學編程的時候必須要學的,這次我們就不接數據庫來操作。也沒有注冊界面,直接就是一個簡單的登錄界面。
demo還是按照之前的改。恩,反正我會,我就要偷懶。

1.更改布局

首先一個用戶名的框框。
Android登錄界面怎么編寫

然后一個登錄密碼的框框。


Android登錄界面怎么編寫

然后還是一個登錄按鈕


Android登錄界面怎么編寫

預覽一下我們的界面

Android登錄界面怎么編寫

好丑,做一個簡單的調整,整體代碼如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.hanlei.first_demo.MainActivity">    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/name"        android:hint="請輸入用戶名"    />    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/password"        android:hint="請輸入密碼"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/bt"        android:text="Login"/></LinearLayout>

Android登錄界面怎么編寫

2.綁定控件

恩,為了像一個登錄界面,我把name也改了。

所以重新綁定。


Android登錄界面怎么編寫

3.邏輯書寫

  login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (name.getText().toString().equals("zhuzhu")&&Integer.parseInt(ps.getText().toString())==520)
                {
                    startActivity(new Intent(MainActivity.this,Main2Activity.class));
                }
            }
        });

這里涉及到一個知識點。
java String 類型如何轉換為int類型。
簡單的來說:

Integer.parseInt();

就可以轉換了
這里突然想到萬一不輸入數字怎么辦。恩,去改下規范。

 <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/password"        android:inputType="number"        android:hint="請輸入密碼"        />

這里加了一行只允許輸入數字。

測試

Android登錄界面怎么編寫

0x02 反編譯分析

分析嘛,很多次了。老規矩

1. Android Killer

Android登錄界面怎么編寫

2.找到主要函數

我們找到邏輯判斷的地方$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 <init>(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;-><init>()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;-><init>(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;-><init>(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;-><init>(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

然后保存進行反編譯。

安裝測試

Android登錄界面怎么編寫

方法 2

思路

不刪除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;-><init>(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就是16進制形式,進行轉換,就知道了我們密碼是多少了,之后在登錄輸出即可。當然這個是可有看到的密碼,如果接入了數據庫就會變成不可見的密碼,到時候就可以進行動態調試來對密碼進行一個輸出了。

0x05 如何植入廣告

什么是廣告?

大神說過一句話叫做,和游戲無關的都是廣告,我們普遍說的廣告就是,一些恩,很煩人的東西。

植入廣告的目的是什么?

植入廣告的目的主要是
(1) 做推廣
(2)能賺到錢

植入廣告原理分析

用一個載體去承載廣告,然后顯示出來。使用的技術用靜態布局,或者使用動態加載等方式。還是來看一下如果植入廣告的具體操作吧。

市面上的廣告

有米廣告

有米廣告,反正我被坑了整整兩天,什么都沒搞成功,還被折騰的夠嗆,不過雖然沒有搞出什么成果來,但是對有米廣告倒是有了一個很深的認識,這個坑人的東西,好氣。
最后我只是搞成功了一個這個東西。


Android登錄界面怎么編寫

爬坑

先來說說,我遇到的坑。希望有人研究的時候可以節約時間。

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里加這一句,可能有用。

 <uses-sdk tools:overrideLibrary="YoumiSdk_v7.4.0_2017-05-18" />

Android登錄界面怎么編寫

重新搞
1.新建一個demo

Android登錄界面怎么編寫

2.加入arr包

Android登錄界面怎么編寫

3.添加依賴關系


Android登錄界面怎么編寫

4. 申請ID

Android登錄界面怎么編寫

5.初始化信息

毫不留情就出問題了。

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

Android登錄界面怎么編寫

換個arr版本接著搞。

記得改配置文件

果然換了一個arr包馬上就對了,太不友好了。

我們接著初始化。

Android登錄界面怎么編寫

6.設置渠道號

Android登錄界面怎么編寫

7.權限配置。

廣告嘛,配置權限權限掃描的才可以運行。

    <uses-permission android:name="android.permission.INTERNET" />  
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
ps

應該同步做一件事情。
應該在我的小本本上同步做一個記錄。

添加v4包
compile 'com.android.support:support-v4:xx.x.x'

這里的v4:xx.x.x一定要和上面的一致,直接看圖:

Android登錄界面怎么編寫

寫完一個調用

Android登錄界面怎么編寫

“Android登錄界面怎么編寫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青浦区| 开封市| 永寿县| 秦安县| 时尚| 浦北县| 蒲江县| 望奎县| 明水县| 贵州省| 辽阳县| 石河子市| 绥阳县| 沛县| 永平县| 山西省| 文成县| 仁寿县| 曲靖市| 永德县| 沐川县| 西林县| 青神县| 栾川县| 洛宁县| 固阳县| 手机| 吴忠市| 黄平县| 长汀县| 伊春市| 汉沽区| 桐梓县| 安吉县| 甘肃省| 辛集市| 商城县| 时尚| 荆门市| 巴马| 鄂托克旗|