Bitmap内存模型
- API10之前Bitmap自身在Dalvik Heap中,像素存在Native
- API10之后像素也存放在Dalvik Heap中
- API26之后像素存在Native
build.gradle
api 'me.weishu:epic:0.3.6'
ImageView目标方法 源码:
/**
* Sets a Bitmap as the content of this ImageView.
*
* @param bm The bitmap to set
*/
@android.view.RemotableViewMethod
public void setImageBitmap(Bitmap bm) {
// Hacky fix to force setImageDrawable to do a full setImageDrawable
// instead of doing an object reference comparison
mDrawable = null;
if (mRecycleableBitmapDrawable == null) {
mRecycleableBitmapDrawable = new BitmapDrawable(mContext.getResources(), bm);
} else {
mRecycleableBitmapDrawable.setBitmap(bm);
}
setImageDrawable(mRecycleableBitmapDrawable);
}
新建Hook工具类
package com.cfs.app.hook;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import com.oden.syd_camera.utils.LogUtils;
import com.taobao.android.dexposed.XC_MethodHook;
/**
* @author xhh
*/
public class ImageHook extends XC_MethodHook {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
ImageView imageView = (ImageView) param.thisObject;
checkBitmap(imageView,((ImageView)param.thisObject).getDrawable());
}
@Override