Smali语言是什么?
Smali
是Dalvik
的寄存器语言,Smali
代码是安卓Apk
反编译而来的,大家可以通过ApkTool
这个工具来反编译App
得到对应的Smali
语言,或者在 Android Studio
中安装java2smail
这个插件,安装成功后选择Build->Compile to Smali
来编译生成对应的Smali
文件
代码示例
源文件如下
public class SurfaceRenderView extends SurfaceView implements IRenderView {
private MeasureHelper mMeasureHelper;
public SurfaceRenderView(Context context) {
super(context);
initView(context);
}
public SurfaceRenderView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public SurfaceRenderView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public SurfaceRenderView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initView(context);
}
private void initView(Context context) {
mMeasureHelper = new MeasureHelper(this);
mSurfaceCallback = new SurfaceCallback(this);
getHolder().addCallback(mSurfaceCallback);
//noinspection deprecation
getHolder().setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
}
@Override
public View getView() {
return this;
}
@Override
public boolean shouldWaitForResize() {
return true;
}
//--------------------
// Layout & Measure
//--------------------
@Override
public void setVideoSize(int videoWidth, int videoHeight) {
if (videoWidth > 0 && videoHeight > 0) {
mMeasureHelper.setVideoSize(videoWidth, videoHeight);
getHolder().setFixedSize(videoWidth, videoHeight);
requestLayout();
}
}
@Override
public void setVideoSampleAspectRatio(int videoSarNum, int videoSarDen) {
if (videoSarNum > 0 && videoSarDen > 0) {
mMeasureHelper.setVideoSampleAspectRatio(videoSarNum, videoSarDen);
requestLayout();
}
}
@Override
public void setVideoRotation(int degree) {
Log.e("", "SurfaceView doesn't support rotation (" + degree + ")!\n");
}
@Override
public void setAspectRatio(int aspectRatio) {
mMeasureHelper.setAspectRatio(aspectRatio);
requestLayout();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mMeasureHelper.doMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(mMeasureHelper.getMeasuredWidth(), mMeasureHelper.getMeasuredHeight());
}
//--------------------
// SurfaceViewHolder
//--------------------
private static final class InternalSurfaceHolder implements IRenderView.ISurfaceHolder {
private SurfaceRenderView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
public InternalSurfaceHolder(@NonNull SurfaceRenderView surfaceView,
@Nullable SurfaceHolder surfaceHolder) {
mSurfaceView = surfaceView;
mSurfaceHolder = surfaceHolder;
}
public void bindToMediaPlayer(IMediaPlayer mp) {
if (mp != null) {
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) &&
(mp instanceof ISurfaceTextureHolder)) {
ISurfaceTextureHolder textureHolder = (ISurfaceTextureHolder) mp;
textureHolder.setSurfaceTexture(null);
}
mp.setDisplay(mSurfaceHolder);
}
}
@NonNull
@Override
public IRenderView getRenderView() {
return mSurfaceView;
}
@Nullable
@Override
public SurfaceHolder getSurfaceHolder() {
return mSurfaceHolder;
}
@Nullable
@Override
public SurfaceTexture getSurfaceTexture() {
return null;
}
@Nullable
@Override
public Surface openSurface() {
if (mSurfaceHolder == null)
return null;
return mSurfaceHolder.getSurface();
}
}
//-------------------------
// SurfaceHolder.Callback
//-------------------------
@Override
public void addRenderCallback(IRenderCallback callback) {
mSurfaceCallback.addRenderCallback(callback);
}
@Override
public void removeRenderCallback(IRenderCallback callback) {
mSurfaceCallback.removeRenderCallback(callback);
}
private SurfaceCallback mSurfaceCallback;
private static final class SurfaceCallback implements SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
private boolean mIsFormatChanged;
private int mFormat;
private int mWidth;
private int mHeight;
private WeakReference<SurfaceRenderView> mWeakSurfaceView;
private Map<IRenderCallback, Object> mRenderCallbackMap = new ConcurrentHashMap<IRenderCallback, Object>();
public SurfaceCallback(@NonNull SurfaceRenderView surfaceView) {
mWeakSurfaceView = new WeakReference<SurfaceRenderView>(surfaceView);
}
public void addRenderCallback(@NonNull IRenderCallback callback) {
mRenderCallbackMap.put(callback, callback);
ISurfaceHolder surfaceHolder = null;
if (mSurfaceHolder != null) {
if (surfaceHolder == null)
surfaceHolder = new InternalSurfaceHolder(mWeakSurfaceView.get(), mSurfaceHolder);
callback.onSurfaceCreated(surfaceHolder, mWidth, mHeight);
}
if (mIsFormatChanged) {
if (surfaceHolder == null)
surfaceHolder = new InternalSurfaceHolder(mWeakSurfaceView.get(), mSurfaceHolder);
callback.onSurfaceChanged(surfaceHolder, mFormat, mWidth, mHeight);
}
}
public void removeRenderCallback(@NonNull IRenderCallback callback) {
mRenderCallbackMap.remove(callback);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mSurfaceHolder = holder;
mIsFormatChanged = false;
mFormat = 0;
mWidth = 0;
mHeight = 0;
ISurfaceHolder surfaceHolder = new InternalSurfaceHolder(mWeakSurfaceView.get(), mSurfaceHolder);
for (IRenderCallback renderCallback : mRenderCallbackMap.keySet()) {
renderCallback.onSurfaceCreated(surfaceHolder, 0, 0);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceHolder = null;
mIsFormatChanged = false;
mFormat = 0;
mWidth = 0;
mHeight = 0;
ISurfaceHolder surfaceHolder = new InternalSurfaceHolder(mWeakSurfaceView.get(), mSurfaceHolder);
for (IRenderCallback renderCallback : mRenderCallbackMap.keySet()) {
renderCallback.onSurfaceDestroyed(surfaceHolder);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
mSurfaceHolder = holder;
mIsFormatChanged = true;
mFormat = format;
mWidth = width;
mHeight = height;
// mMeasureHelper.setVideoSize(width, height);
ISurfaceHolder surfaceHolder = new InternalSurfaceHolder(mWeakSurfaceView.get(), mSurfaceHolder);
for (IRenderCallback renderCallback : mRenderCallbackMap.keySet()) {
renderCallback.onSurfaceChanged(surfaceHolder, format, width, height);
}
}
}
//--------------------
// Accessibility
//--------------------
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setClassName(SurfaceRenderView.class.getName());
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
info.setClassName(SurfaceRenderView.class.getName());
}
}
}
编译生成的Smali
文件如下
.class public Lcom/atstudy/player/media/SurfaceRenderView;
.super Landroid/view/SurfaceView;
.source "SurfaceRenderView.java"
# interfaces
.implements Lcom/atstudy/player/media/IRenderView;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;,
Lcom/atstudy/player/media/SurfaceRenderView$InternalSurfaceHolder;
}
.end annotation
# instance fields
.field private mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
.field private mSurfaceCallback:Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
# direct methods
.method public constructor <init>(Landroid/content/Context;)V
.registers 2
.param p1, "context" # Landroid/content/Context;
.prologue
.line 47
invoke-direct {p0, p1}, Landroid/view/SurfaceView;-><init>(Landroid/content/Context;)V
.line 48
invoke-direct {p0, p1}, Lcom/atstudy/player/media/SurfaceRenderView;->initView(Landroid/content/Context;)V
.line 49
return-void
.end method
.method public constructor <init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
.registers 3
.param p1, "context" # Landroid/content/Context;
.param p2, "attrs" # Landroid/util/AttributeSet;
.prologue
.line 52
invoke-direct {p0, p1, p2}, Landroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
.line 53
invoke-direct {p0, p1}, Lcom/atstudy/player/media/SurfaceRenderView;->initView(Landroid/content/Context;)V
.line 54
return-void
.end method
.method public constructor <init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
.registers 4
.param p1, "context" # Landroid/content/Context;
.param p2, "attrs" # Landroid/util/AttributeSet;
.param p3, "defStyleAttr" # I
.prologue
.line 57
invoke-direct {p0, p1, p2, p3}, Landroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
.line 58
invoke-direct {p0, p1}, Lcom/atstudy/player/media/SurfaceRenderView;->initView(Landroid/content/Context;)V
.line 59
return-void
.end method
.method public constructor <init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
.registers 5
.param p1, "context" # Landroid/content/Context;
.param p2, "attrs" # Landroid/util/AttributeSet;
.param p3, "defStyleAttr" # I
.param p4, "defStyleRes" # I
.annotation build Landroid/annotation/TargetApi;
value = 0x15
.end annotation
.prologue
.line 63
invoke-direct {p0, p1, p2, p3, p4}, Landroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
.line 64
invoke-direct {p0, p1}, Lcom/atstudy/player/media/SurfaceRenderView;->initView(Landroid/content/Context;)V
.line 65
return-void
.end method
.method private initView(Landroid/content/Context;)V
.registers 4
.param p1, "context" # Landroid/content/Context;
.prologue
.line 68
new-instance v0, Lcom/atstudy/player/media/MeasureHelper;
invoke-direct {v0, p0}, Lcom/atstudy/player/media/MeasureHelper;-><init>(Landroid/view/View;)V
iput-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
.line 69
new-instance v0, Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
invoke-direct {v0, p0}, Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;-><init>(Lcom/atstudy/player/media/SurfaceRenderView;)V
iput-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mSurfaceCallback:Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
.line 70
invoke-virtual {p0}, Lcom/atstudy/player/media/SurfaceRenderView;->getHolder()Landroid/view/SurfaceHolder;
move-result-object v0
iget-object v1, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mSurfaceCallback:Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
invoke-interface {v0, v1}, Landroid/view/SurfaceHolder;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
.line 72
invoke-virtual {p0}, Lcom/atstudy/player/media/SurfaceRenderView;->getHolder()Landroid/view/SurfaceHolder;
move-result-object v0
const/4 v1, 0x0
invoke-interface {v0, v1}, Landroid/view/SurfaceHolder;->setType(I)V
.line 73
return-void
.end method
# virtual methods
.method public addRenderCallback(Lcom/atstudy/player/media/IRenderView$IRenderCallback;)V
.registers 3
.param p1, "callback" # Lcom/atstudy/player/media/IRenderView$IRenderCallback;
.prologue
.line 180
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mSurfaceCallback:Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
invoke-virtual {v0, p1}, Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;->addRenderCallback(Lcom/atstudy/player/media/IRenderView$IRenderCallback;)V
.line 181
return-void
.end method
.method public getView()Landroid/view/View;
.registers 1
.prologue
.line 77
return-object p0
.end method
.method public onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
.registers 3
.param p1, "event" # Landroid/view/accessibility/AccessibilityEvent;
.prologue
.line 277
invoke-super {p0, p1}, Landroid/view/SurfaceView;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
.line 278
const-class v0, Lcom/atstudy/player/media/SurfaceRenderView;
invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v0
invoke-virtual {p1, v0}, Landroid/view/accessibility/AccessibilityEvent;->setClassName(Ljava/lang/CharSequence;)V
.line 279
return-void
.end method
.method public onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
.registers 4
.param p1, "info" # Landroid/view/accessibility/AccessibilityNodeInfo;
.annotation build Landroid/annotation/TargetApi;
value = 0xe
.end annotation
.prologue
.line 284
invoke-super {p0, p1}, Landroid/view/SurfaceView;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
.line 285
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0xe
if-lt v0, v1, :cond_12
.line 286
const-class v0, Lcom/atstudy/player/media/SurfaceRenderView;
invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v0
invoke-virtual {p1, v0}, Landroid/view/accessibility/AccessibilityNodeInfo;->setClassName(Ljava/lang/CharSequence;)V
.line 288
:cond_12
return-void
.end method
.method protected onMeasure(II)V
.registers 5
.param p1, "widthMeasureSpec" # I
.param p2, "heightMeasureSpec" # I
.prologue
.line 118
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
invoke-virtual {v0, p1, p2}, Lcom/atstudy/player/media/MeasureHelper;->doMeasure(II)V
.line 119
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
invoke-virtual {v0}, Lcom/atstudy/player/media/MeasureHelper;->getMeasuredWidth()I
move-result v0
iget-object v1, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
invoke-virtual {v1}, Lcom/atstudy/player/media/MeasureHelper;->getMeasuredHeight()I
move-result v1
invoke-virtual {p0, v0, v1}, Lcom/atstudy/player/media/SurfaceRenderView;->setMeasuredDimension(II)V
.line 120
return-void
.end method
.method public removeRenderCallback(Lcom/atstudy/player/media/IRenderView$IRenderCallback;)V
.registers 3
.param p1, "callback" # Lcom/atstudy/player/media/IRenderView$IRenderCallback;
.prologue
.line 185
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mSurfaceCallback:Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
invoke-virtual {v0, p1}, Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;->removeRenderCallback(Lcom/atstudy/player/media/IRenderView$IRenderCallback;)V
.line 186
return-void
.end method
.method public setAspectRatio(I)V
.registers 3
.param p1, "aspectRatio" # I
.prologue
.line 112
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
invoke-virtual {v0, p1}, Lcom/atstudy/player/media/MeasureHelper;->setAspectRatio(I)V
.line 113
invoke-virtual {p0}, Lcom/atstudy/player/media/SurfaceRenderView;->requestLayout()V
.line 114
return-void
.end method
.method public setVideoRotation(I)V
.registers 5
.param p1, "degree" # I
.prologue
.line 107
const-string v0, ""
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "SurfaceView doesn\'t support rotation ("
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ")!\n"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 108
return-void
.end method
.method public setVideoSampleAspectRatio(II)V
.registers 4
.param p1, "videoSarNum" # I
.param p2, "videoSarDen" # I
.prologue
.line 99
if-lez p1, :cond_c
if-lez p2, :cond_c
.line 100
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
invoke-virtual {v0, p1, p2}, Lcom/atstudy/player/media/MeasureHelper;->setVideoSampleAspectRatio(II)V
.line 101
invoke-virtual {p0}, Lcom/atstudy/player/media/SurfaceRenderView;->requestLayout()V
.line 103
:cond_c
return-void
.end method
.method public setVideoSize(II)V
.registers 4
.param p1, "videoWidth" # I
.param p2, "videoHeight" # I
.prologue
.line 90
if-lez p1, :cond_13
if-lez p2, :cond_13
.line 91
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
invoke-virtual {v0, p1, p2}, Lcom/atstudy/player/media/MeasureHelper;->setVideoSize(II)V
.line 92
invoke-virtual {p0}, Lcom/atstudy/player/media/SurfaceRenderView;->getHolder()Landroid/view/SurfaceHolder;
move-result-object v0
invoke-interface {v0, p1, p2}, Landroid/view/SurfaceHolder;->setFixedSize(II)V
.line 93
invoke-virtual {p0}, Lcom/atstudy/player/media/SurfaceRenderView;->requestLayout()V
.line 95
:cond_13
return-void
.end method
.method public shouldWaitForResize()Z
.registers 2
.prologue
.line 82
const/4 v0, 0x1
return v0
.end method
具体解析如下
.class public Lcom/atstudy/player/media/SurfaceRenderView;
.super Landroid/view/SurfaceView;
.source "SurfaceRenderView.java"
前三行告诉我们这个类相关的信息
访问修饰符为public
全限定名为com/atstudy/player/media/SurfaceRenderView
继承自android/view/SurfaceView
源文件名SurfaceRenderView.java
,
Note:
经过混淆的DEX
文件,反编译出来的Smali
代码可能没有源文件信息,source
可能为空
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;,
Lcom/atstudy/player/media/SurfaceRenderView$InternalSurfaceHolder;
}
.end annotation
注解,成员内部类共有两个
.field private mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
.field private mSurfaceCallback:Lcom/atstudy/player/media/SurfaceRenderView$SurfaceCallback;
私有属性mMeasureHelper
, mSurfaceCallback
说明
.method public constructor <init>(Landroid/content/Context;)V
.registers 2
.param p1, "context" # Landroid/content/Context;
.prologue
.line 47
invoke-direct {p0, p1}, Landroid/view/SurfaceView;-><init>(Landroid/content/Context;)V
.line 48
invoke-direct {p0, p1}, Lcom/atstudy/player/media/SurfaceRenderView;->initView(Landroid/content/Context;)V
.line 49
return-void
.end method
构造方法其中
.registers
指定方法中寄存器总数
.prologue
表示代码开始
invoke-direct
表示调用函数`
Note:``Smali
中的函数调用Smali
中的函数和成员变量一样也分为两种类型,但是不同成员变量中的static
和instance
之分,而是direct
和virtual
之分。那么direct method
和virtual method
有什么区别呢?直白地讲,direct method
就是private
函数,其余的public
和protected
函数都属于virtual method
。所以在调用函数时,有invoke-direct
,invoke-virtual
,另外还有invoke-static
、invoke-super
以及invoke-interface
等几种不同的指令。当然其实还有invoke-XXX/range
指令的,这是参数多于4个的时候调用的指令,比较少见,了解下即可
返回类型如下:
- V void,只能用于返回值类型
- Z boolean
- B byte
- S short
- C charI intJ long(64 位)
- F floatD double(64 位)
- L Java 类类型
- [ 数组类型
分析一个其中方法逻辑
//onMeasure方法访问域为protected,两个Int类型参数,一个为widthMeasureSpec,
//另一个为heightMeasureSpec,返回值为Void类型,需要5个寄存器,其中p1存储了widthMeasureSpec, p2存储了heightMeasureSpec
.method protected onMeasure(II)V
.registers 5
.param p1, "widthMeasureSpec" # I
.param p2, "heightMeasureSpec" # I
.prologue //代码开始
.line 118
// 获取mMeasureHelper字段并保存到V0寄存器中,p0相当于java中到this关键字
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
//调用mMeasureHelper的doMeasure方法,其中p1,p2为参数,参数类型为int,返回值为Void
invoke-virtual {v0, p1, p2}, Lcom/atstudy/player/media/MeasureHelper;->doMeasure(II)V
.line 119
//获取mMeasureHelper字段并保存到V0寄存器中,p0相当于java中到this关键字
iget-object v0, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
//调用mMeasureHelper的getMeasuredWidth()方法,返回值为Int类型
invoke-virtual {v0}, Lcom/atstudy/player/media/MeasureHelper;->getMeasuredWidth()I
//将得到的结果放到V0寄存器中
move-result v0
//获取mMeasureHelper字段并保存到V1寄存器中,p0相当于java中到this关键字
iget-object v1, p0, Lcom/atstudy/player/media/SurfaceRenderView;->mMeasureHelper:Lcom/atstudy/player/media/MeasureHelper;
//调用mMeasureHelper的getMeasuredHeight方法,返回值为Int类型
invoke-virtual {v1}, Lcom/atstudy/player/media/MeasureHelper;->getMeasuredHeight()I
//将得到的结果放到V1寄存器中
move-result v1
//调用当前对象的setMeasuredDimension方法,参数为v0和v1寄存器的值,都为Int类型,返回值为Void
invoke-virtual {p0, v0, v1}, Lcom/atstudy/player/media/SurfaceRenderView;->setMeasuredDimension(II)V
.line 120
//返回Void类型
return-void
.end method//方法结束
网友评论