duangsues.is_a? SaltedFish
然后Adapter就写了个这
enum Mode { NORMAL, DELETE } //< 有必要?
public class ModListAdapter extends BaseDynmaicGridAdapter {
private Mode mode = NORMAL;
public ModeListDynamicGridViewAdapter(Context ctx) { super(ctx, new ArrayList<>(), 1); }
@Override
public View getView(int position, View view_convert, Group parent) {
ModViewHolder holder;
if (view_covert != null) { holder = (ModViewHolder) view_convert.getView();
else {
View convertView = LayoutInflater.from(getContext()).inflate(R.layout.mod_item, null); //TODO: use overloads
holder = new ModViewHolder(contentView);
convertView.setTag(holder); //TODO extract (new ViewHolder) + View.setTag
}
view_convert/*merge...*/.setOnTouchListener((v, event) -> {
if (mode == Mode.REMOVE && (event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) { // TODO: extract getAction()&ACTION_MAST
TextView tvTitle = v.findViewById(R.id.mod_item_title);
Switch enable = v.findViewById(R.id.mod_item_enabled);
GoodmodEntry entry = (GoodmodEntry) getItem(position);
boolean toRemove = !entry.isToRemove();
entry.setToRemove(toRemove);
tvTitle.setTextColor(toRemove? Color.RED : enable.isEnabled()? Color.BLACK : Color.GRAY);
return true;
} else return false;
});
holder.build((GoodmodEntry) getItem(position));
return view_convert;
}
}Forwarded from dnaugsuz
草,如此模板化的代码你都不用 IDEA 功能抽提的么
fun boilerplate(menuId: Int, navControllerId: Int) {
navigation.menu.clear()
menuInflater.inflate(menuId, navigation.menu)
navController.graph = navController.navInflater.inflate(navControllerId)
} when (booru?.type) {
Booru.SANKAKU -> boilerplate(R.menu.navigation_sankaku, R.navigation.main_navigation_sankaku)
Booru.GEL -> boilerplate(R.menu.navigation_gel, R.navigation.main_navigation_gel)
null -> boilerplate(R.menu.navigation, R.navigation.main_navigation)
}Forwarded from dnaugsuz
如果你是想实现客户端“可信计算”,可能木有了。
如果你的模块解耦足够好(加密存储是抽象的,接口和普通存储没有任何区别),那么你可以延续现有的操作
否则我建议直接削掉
上面也说了,有 root 直接读内存甚至 call 你自己的 JNI exports (甚至没存符号表的 C/++ 函数都能给你找出来),
无 root Xposed 都可以 hook 拿到你解密出的数据
计算设备是别人的,理论就没有绝对的安全,所以要么放服务器要么不放
如果你的模块解耦足够好(加密存储是抽象的,接口和普通存储没有任何区别),那么你可以延续现有的操作
否则我建议直接削掉
上面也说了,有 root 直接读内存甚至 call 你自己的 JNI exports (甚至没存符号表的 C/++ 函数都能给你找出来),
无 root Xposed 都可以 hook 拿到你解密出的数据
计算设备是别人的,理论就没有绝对的安全,所以要么放服务器要么不放
Forwarded from dnaugsuz
🤔 三级缓存?我只知道 LRU 缓存
缓存不是一级已经够了吗…… 难不成你写一个
缓存不是一级已经够了吗…… 难不成你写一个
repeat(10) { println() } 还用递归来着Forwarded from dnaugsuz
举个例子,某回合塔防游戏把一局的“金钱”数存在 JNI 里并且只有进行加减法时解密。
但这个游戏还是被 dalao 破解了,教程也很容易看——因为加密算法是 consistent,一致也即同输入一定同输出的,所以先弄到教程指定的“金钱”,然后再拿修改器搜内存,两次确定,锁一下数值就可以直接给破解了。
但这个游戏还是被 dalao 破解了,教程也很容易看——因为加密算法是 consistent,一致也即同输入一定同输出的,所以先弄到教程指定的“金钱”,然后再拿修改器搜内存,两次确定,锁一下数值就可以直接给破解了。
Forwarded from dnaugsuz
奇怪的知识增加了
我只知道会用内存缓存(这个对应用开发者理应是透明的)
和本地文件缓存
我只知道会用内存缓存(这个对应用开发者理应是透明的)
和本地文件缓存