輸出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