持續更新--Smali代碼庫

輸出Toast

const-string v0, "這裏是要輸入的文字unicode碼"
const/4 v1, 0x1
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V

打印Log信息

const-string v0, "這裏是要輸入的文字unicode碼"
invoke-static {v0}, Lcom/android/killer/Log;->LogStr(Ljava/lang/String;)V

加載SO庫

const-string v0, "so 庫名稱"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

彈出普通對話框

java代碼:

new AlertDialog.Builder(self)
.setTitle("普通對話框")
.setMessage("你好,Android!")
.show();

Smali代碼:

new-instance v1,Landroid/app/AlertDialog$Builder;
invoke-direct {v1,p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V
.line 29
.local v1,builder:Landroid/app/AlertDialog$Builder;
const-string v2,"\u666e\u901a\u5bf9\u8bdd\u6846"
invoke-virtual {v1,v2}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
.line 31
const-string v2,"\u4f60\u597d\uff0cAndroid!"
invoke-virtual {v1,v2},Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
.line 52
invoke-virtual {v1},Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;
move-result-object v2
invoke-virtual {v2},Landroid/app/AlertDialog;->show()V

棧跟蹤(調用關係)

java代碼:

new Exception("print trace").printStackTrace();

smali代碼:

new-instance v0,Ljava/lang/Exception;
const-string v1,"print trace"
invoke-direct {v0,v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

棧跟蹤信息記錄了程序從啓動到printStackTrace()被執行期間所有被調用過的方法。從下往上查看棧跟蹤信息,
找到第一條以com.android.stackTrace開頭的信息。
棧跟蹤信息是WARN級別,而且Tag名稱被系統命令爲System.err. 命令行:adb logcat -s System.err:V *:W

Method Profiling(調用關係)

#android.os.Debug.startMethodTracing("123");  "123"爲文件名
#a();
#android.os.Debug.stopMethodTracing();

Android-Manifest.xml添加SD卡寫入權限
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

#android.os.Debug.startMethodTracing("123");
const-string v0, "123"
invoke-static {v0}, Landroid/os/Debug;->startMethodTracing(Ljava/lang/String;) V

#android.os.Debug.stopMethodTracing();
invoke-static {}, Landroid/os/Debug;->stopMethodTracing() V

Intent的各種啓動方式

java代碼:

/**
     * 隱式啓動
     */
    private void start0(){
        Intent intent = new Intent();  
        intent.setClassName("com.example.demo", "com.example.demo.MainActivity");  
        startActivity(intent);  
    }
    /**
     * 普通啓動
     */
    private void start2(){
        startActivity(new Intent(this,MainActivity.class));
    }
    /**
     * 傳遞參數
     */
    private void start3(){
        Intent intent = new Intent("com.example.demo.MainActivity");    
        Bundle bundle = new Bundle();    
        bundle.putInt("id", 0);    
        bundle.putString("name", "scott");    
        intent.putExtras(bundle);    
        startActivity(intent);   
    }
    /**
     * 設置action 啓動瀏覽器
     */
    private void start4(){
        Uri webViewUri = Uri.parse("http://blog.csdn.net/u012833250");  
        Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);  
        startActivity(intent);
    }

smali:

隱式啓動

    new-instance v0, Landroid/content/Intent;

    invoke-direct {v0}, Landroid/content/Intent;-><init>()V

    .line 21
    .local v0, "intent":Landroid/content/Intent;
    const-string v1, "com.example.demo"

    const-string v2, "com.example.demo.MainActivity"

    invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;

    .line 22
    invoke-virtual {p0, v0}, Lcom/example/demo/MainActivity;->startActivity(Landroid/content/Intent;)V

普通啓動

 new-instance v0, Landroid/content/Intent;

    const-class v1, Lcom/example/demo/MainActivity;

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Lcom/example/demo/MainActivity;->startActivity(Landroid/content/Intent;)V

傳遞參數

 new-instance v1, Landroid/content/Intent;

    const-string v2, "com.example.demo.MainActivity"

    invoke-direct {v1, v2}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V

    .line 29
    .local v1, "intent":Landroid/content/Intent;
    new-instance v0, Landroid/os/Bundle;

    invoke-direct {v0}, Landroid/os/Bundle;-><init>()V

    .line 30
    .local v0, "bundle":Landroid/os/Bundle;
    const-string v2, "id"

    const/4 v3, 0x0

    invoke-virtual {v0, v2, v3}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V

    .line 31
    const-string v2, "name"

    const-string v3, "scott"

    invoke-virtual {v0, v2, v3}, Landroid/os/Bundle;->putString(Ljava/lang/String;Ljava/lang/String;)V

    .line 32
    invoke-virtual {v1, v0}, Landroid/content/Intent;->putExtras(Landroid/os/Bundle;)Landroid/content/Intent;

    .line 33
    invoke-virtual {p0, v1}, Lcom/example/demo/MainActivity;->startActivity(Landroid/content/Intent;)V

設置action 啓動瀏覽器

const-string v2, "http://blog.csdn.net/u012833250"

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

    move-result-object v1

    .line 37
    .local v1, "webViewUri":Landroid/net/Uri;
    new-instance v0, Landroid/content/Intent;

    const-string v2, "android.intent.action.VIEW"

    invoke-direct {v0, v2, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V

    .line 38
    .local v0, "intent":Landroid/content/Intent;
    invoke-virtual {p0, v0}, Lcom/example/demo/MainActivity;->startActivity(Landroid/content/Intent;)V
發佈了41 篇原創文章 · 獲贊 115 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章