lipingx
lipingx
  • 发布:2019-12-07 15:15
  • 更新:2020-12-28 14:06
  • 阅读:3251

uni-app云打包原生插件 应用启动时初始化

分类:uni-app

希望 uni-app原生插件 支持在 Application onCreate 时初始化

在接入一些第三方sdk的时候, sdk对初始化的时序有要求, 会执行一些动态类创建和加载等等的过程.

在使用云打包的时候这些sdk就无法正常初始化了, 官方提供的插件注册方法(hookClass/plugins)也不行.

通过本地打包, 写个Application类继承自官方的入口, sdk初始化逻辑写在onCreate里面, 可以解决问题.

但是我又想接入这些有冲突的sdk, 又想享受云打包的插件生态, (这个sdk也可能被封装成云打包插件).

所以请问能不能这样:

插件提供一个类名, 打包的时候把这个类的实例调用插入到 Application onCreate 里面?

2019-12-07 15:15 负责人:无 分享
已邀请:
lipingx

lipingx (作者) - 插件开发者

顶一下, 希望官方回复一下.

DCloud_Android_ST

DCloud_Android_ST

android吗 用AppHookProxy的onCreate触发初始化也不行?

  • lipingx (作者)

    是的, android端

    官方提供的初始化方法都使用了, 都不行.

    2019-12-23 19:02

  • DCloud_Android_ST

    回复 lipingx: onCreate触发算是比较早的。感觉你说的可能性不大 。你有过云打包吗 appid发下

    2019-12-23 19:05

  • lipingx (作者)

    回复 DCloud_Android_ST: 目前还没有云打包, 是还在开发中, 就是在本地开发云插件的时候发现初始化不了. 这样可以加个QQ吗1628006002, 我把项目打zip包给你看一下.

    2019-12-23 19:18

  • 8***@qq.com

    回复 DCloud_Android_ST: 我也遇到了这个问题,求给个解决方案

    2020-04-12 08:17

  • 5***@qq.com

    同样问题,求大神解决,用provider初始化也不行

    2020-04-15 21:31

  • 5***@qq.com

    用了com.liulishuo.filedownloader这个包就初始化不了 api 'com.liulishuo.filedownloader:library:1.4.1'

    2020-04-15 21:42

  • DCloud_Android_ST

    回复 5***@qq.com: 目前只提供AppHookProxy的onCreate。必须要在Application onCreate是那个第三方SDK?

    2020-04-16 11:04

  • 5***@qq.com

    回复 DCloud_Android_ST: 是的,这个包中的service在另一个进程中跑。可能构筑了两个application,我换了一个高版本1.64以后可以在钩子里初始化了,还有个疑问是不是uni的引用有冲突呢?uni框架中有没有引用过com.liulishuo.filedownloader这个包

    2020-04-16 14:05

  • DCloud_Android_ST

    回复 5***@qq.com: 官方没有集成com.liulishuo.filedownloader这个包

    2020-04-16 14:07

  • 5***@qq.com

    回复 DCloud_Android_ST:好的, 谢谢解答哦

    2020-04-16 17:47

  • zhangtao5298

    回复 lipingx: 你这个解决了吗

    2020-05-11 10:39

  • zhangtao5298

    你好 我也遇到这个问题 请问有解决方法吗

    2020-05-11 10:40

  • lipingx (作者)

    回复 zhangtao5298: 没有解决

    2020-05-17 11:23

  • lipingx (作者)

    回复 DCloud_Android_ST: 大佬, 这个需求可以优化一下吗?

    2020-08-21 14:37

  • DCloud_Android_ST

    可以使用UniAppHookProxy的子进程回调onSubProcessCreate 初始化三方SDK以满足需要在另外一个进程操作的业务逻辑。但当前子进程无uniapp原生插件环境不可注册插件。不过该逻辑只有在2.9.8+的SDK才生效

    2020-12-11 10:41

1***@qq.com

1***@qq.com

请问这个问你你们解决了吗,我也遇到了这个问题

  • lipingx (作者)

    没有解决

    2020-08-21 14:36

xiaojun617

xiaojun617

我的app需要分享文件到企业微信,企业微信提供了sdk,如下链接是教程,我在UniAppHookProxy的onCreate中无法初始化sdk,请问如何解决?
https://work.weixin.qq.com/api/doc/90000/90136/91196

public class AppHook implements UniAppHookProxy {  
    private static final String SCHEMA = "wwauth69a891625f088234000003";  
    private static IWWAPI iwwapi;  

    @Override  
    public void onCreate(Application application) {  
        iwwapi = WWAPIFactory.createWWAPI(application); // 报错  
        iwwapi.registerApp(SCHEMA);  
    }  
}
  • xiaojun617

    我把我新建的Module下的build.gradle文件内容改成和官方插件uniplugin_module下的build.gradle内容一致,就初始化成功了

    2020-12-11 09:24

  • DCloud_Android_ST

    回复 xiaojun617: onCreate只会在主进程初始化。子进程不会触发 所以可以在UniAppHookProxy 的onSubProcessCreate子进程初始化类似的SDK

    2020-12-28 11:03

寂正

寂正

我也遇到了同样的问题

  • DCloud_Android_ST

    onCreate只会在主进程初始化。子进程不会触发 所以可以在UniAppHookProxy 的onSubProcessCreate子进程初始化类似的SDK。

    2020-12-28 11:02

  • 寂正

    回复 DCloud_Android_ST:

    public class OfficeOnline_AppProxy implements UniAppHookProxy {

    @Override

    public void onSubProcessCreate(Application application) {

    System.out.println("-----------------3----------------------" + application);

    QbSdk.preinstallStaticTbs(application);

    }


    @Override  
    public void onCreate(Application application) {
    System.out.println("--------------------2-------------------" + application);

    QbSdk.preinstallStaticTbs(application);

    }

    }

    onCreate方法执行但是报错

    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference

    onSubProcessCreate根本不执行

    2020-12-28 14:07

  • DCloud_Android_ST

    回复 寂正: onSubProcessCreate是子进程触发。你说不触发我这测试可以。看log需要去子进程看才可以

    2020-12-28 14:42

该问题目前已经被锁定, 无法添加新回复