【Android】进行初步安卓开发-2020/2/7

一、HelloWorld

打开Android Studio,创建项目:

新建成功后:

在新创建的MainActivaty.java文件中,内容如下:

package com.example.helloworld;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

可以看到这里创建了Activaty,是可以被AndroidManifest.xml用来注册的。而在java问家中,又指定了内容显示到res下layout文件夹中的activity_main.xml中,即一个框架文件中。

运行一下:

这里,我们创建一个框架文件,实践一下:

然后新创建一个类,来对应它:

package com.example.helloworld;

import android.app.Activity;
import android.os.Bundle;

public class helloworld extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.helloword);
    }
}

并在AndroidManifest.xml中进行注册:

<activity android:name=".helloworld"/>

在主函数中,添加按钮来调用新窗口:

package com.example.test;

import android.content.Intent;
import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
                startActivity(new Intent(MainActivity.this,helloworld.class));
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

在新建的helloworld.xml中添加一个edittext和一个button,在java文件中写对应的函数:

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

public class helloworld extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.helloworld);
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText editText = (EditText)findViewById(R.id.edittest);
                editText.setText("I Love U , ZTZ");
            }
        });
    }
}

运行后,在主界面,点击按钮,进入自己创建的界面,再点击生成的按钮:

此时,可以获得编译好的apk文件:

二、这个杀手不太冷,初步逆向

使用AndroidKiller来逆向apk文件:

查看新建的helloworld类:

如图,一个smali文件对应一个class文件,具体的文件结构,这里不做赘述。

那么 smali语法中与java的对应如何呢:

java smali
boolean Z
char C
byte B
short S
int I
float G
long J
double D
object Ljava/lang/Object;
int[]

[I

object[][] [[Ljava/lang/Object;
.class public Lcom/example/test/helloworld;
.super Landroid/app/Activity;
.source "helloworld.java"


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

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

    return-void
.end method


# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .locals 2
    .param p1, "savedInstanceState"    # Landroid/os/Bundle;

    .line 14
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 15
    const v0, 0x7f0b002e

    invoke-virtual {p0, v0}, Lcom/example/test/helloworld;->setContentView(I)V

    .line 16
    const v0, 0x7f080049

    invoke-virtual {p0, v0}, Lcom/example/test/helloworld;->findViewById(I)Landroid/view/View;

    move-result-object v0

    check-cast v0, Landroid/widget/Button;

    .line 17
    .local v0, "button":Landroid/widget/Button;
    new-instance v1, Lcom/example/test/helloworld$1;

    invoke-direct {v1, p0}, Lcom/example/test/helloworld$1;-><init>(Lcom/example/test/helloworld;)V

    invoke-virtual {v0, v1}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 24
    return-void
.end method
发布了248 篇原创文章 · 获赞 337 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_37865996/article/details/104209554