1.module所在build.gradle添加配置启用ViewBinding + 代码混淆
android{
...
viewBinding {
enabled = true
}
}
因封装使用了反射,所以混淆规则需将反射调用方法禁止混淆
# ViewBinding
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
public static * inflate(android.view.LayoutInflater);
}
2.封装BaseActivity(关键代码段)
abstract class BaseActivity<VB : ViewBinding>: AppCompatActivity(){
private var _bind: VB? = null
protected val mViewBinding get() = _bind!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
try {
val vmClass = (this.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
val method: Method = vmClass.getMethod("inflate", LayoutInflater::class.java)
_bind = method.invoke(null, layoutInflater) as VB
setContentView(mViewBinding.root)
} catch (e: NoSuchMethodException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
} catch (e: InvocationTargetException) {
e.printStackTrace()
}
}
@CallSuper
override fun onDestroy() {
super.onDestroy()
_bind = null
}
}
3.封装BaseFragment(关键代码段)
abstract class BaseFragment<VB : ViewBinding> : Fragment() {
private var _bind: VB? = null
protected val mViewBinding get() = _bind!!
@CallSuper
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
try {
val vmClass = (this.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
val method: Method = vmClass.getMethod("inflate", LayoutInflater::class.java)
_bind = method.invoke(null, layoutInflater) as VB
return mViewBinding.root
} catch (e: NoSuchMethodException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
} catch (e: InvocationTargetException) {
e.printStackTrace()
}
return null
}
@CallSuper
override fun onDestroyView() {
super.onDestroyView()
_bind = null
}
}
本文介绍了如何在Android项目中启用ViewBinding,并提供了一种封装BaseActivity和BaseFragment的方法,以便于在应用中统一使用ViewBinding。文章内容包括在模块的build.gradle中添加启用ViewBinding的配置,以及为避免混淆问题提供的混淆规则建议,同时展示了BaseActivity和BaseFragment的关键代码段。

2191

被折叠的 条评论
为什么被折叠?



