正常情况下,我们会考虑在的中去初始化,不过推荐下面的写法:
@DefaultLifeCycle(application = ".SimpleTinkerInApplication",flags = ShareConstants.TINKER_ENABLE_ALL,loadVerifyFlag = false)public class SimpleTinkerInApplicationLike extends ApplicationLike {public SimpleTinkerInApplicationLike(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) {super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);}@Overridepublic void onBaseContextAttached(Context base) {super.onBaseContextAttached(base);}@Overridepublic void onCreate() {super.onCreate();TinkerInstaller.install(this);}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
通过名字你可能会猜,并非是的子类,而是一个类似的类 。
建议编写一个的子类,你可以当成去使用,注意顶部的注解:@,其属性,会在编译期生成一个ation类 。
所以,虽然我们这么写了,但是实际上会在编译期生成,所以.xml中是这样的:
".SimpleTinkerInApplication".../>
- 1
- 2
- 3
- 1
- 2
- 3
编写如果报红,可以build下 。
这样其实也能猜出来,这个注解背后有个 在做处理,如果你没了解过,可以看下:
通过该文会对一个编译时注解的运行流程和基本API有一定的掌握,文中也会对该部分的源码做解析 。
上述,就完成了的初始化,那么调用的时机,我们直接在中添加一个设置:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void loadPatch(View view) {TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(),Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed.apk");}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
我们会将patch文件直接push到根目录;
所以一定要注意:添加权限,如果你是6.x以上的系统,自己添加上授权代码,或者手动在设置页面打开读写权限 。