前言
@AndroidEntryPoint用于修饰ComponentActivity、Service、Broadcast、service、Fragment、View。@HiltAndroidApp用于修饰Application;
注解规则
-
节点使用@HiltAndroidApp或@AndroidEntryPoint注解修饰有且仅有一个;
-
@HiltAndroidApp或@AndroidEntryPoint注解只能用于修饰类,而不能用于修饰接口;
-
@HiltAndroidApp或@AndroidEntryPoint注解修饰的类不能使用泛型;
-
@HiltAndroidApp或@AndroidEntryPoint注解value值默认使用Void.class,我们最好不要去改动;
-
一个项目中@HiltAndroidApp只允许出现一次;
-
baseElement表示@HiltAndroidApp或@AndroidEntryPoint注解修饰的类的父类,如果baseElement使用了@AndroidEntryPoint注解修饰:
-
(1) @AndroidEntryPoint注解修饰的类 和 其baseElement节点要么都使用@WithFragmentBindings注解修饰,要么都不要使用该注解;
-
(2) @AndroidEntryPoint注解修饰的类不要使用@OptionalInject修饰的注解修饰 || baseElement类型使用@OptionalInject修饰的注解修饰;
-
@HiltAndroidApp只能用于修饰Application的继承类;
-
@AndroidEntryPoint可用于修饰Activity、Service、Broadcast_service,Fragment,View:
-
(1)@AndroidEntryPoint用于修饰Activity时,只能修饰androidx.activity.ComponentActivity的继承节点;
-
(2)@AndroidEntryPoint不能用于修饰Application的继承类。
代码生成工作
@HiltAndroidApp或@AndroidEntryPoint修饰的节点生成xx_GeneratedInjector类
只要使用@HiltAndroidApp或@AndroidEntryPoint修饰的节点都会生成xx_GeneratedInjector类。
demo:
@AndroidEntryPoint
class UserListFragment : Fragment() {...}
生成的类:
@OriginatingElement(
topLevelClass = UserListFragment.class
)
@GeneratedEntryPoint
@InstallIn(FragmentComponent.class)
public interface UserListFragment_GeneratedInjector {
void injectUserListFragment(UserListFragment userListFragment);
}
@HiltAndroidApp修饰的Application实现类生成类
生成Hilt_xx类。这个类的作用是实现依赖注入到@HiltAndroidApp修饰的Application类中。
demo:
@HiltAndroidApp
class MyApplication : Application() {...}
生成Hilt_MyApplication类:
//A generated base class to be extended by the @HiltAndroidApp annotated class. If using the Gradle plugin, this is swapped as the base class via bytecode transformation.
@Generated("ApplicationGenerator")
abstract class Hilt_MyApplication extends Application implements GeneratedComponentManagerHolder {
private final ApplicationComponentManager componentManager =
new ApplicationComponentManager(
new ComponentSupplier() {
@Override
public Object get() {
//_com_aregyan_github_Application_HiltComponents内部类SingletonComponent生成的,该类后面生成。