zoukankan      html  css  js  c++  java
  • Android 如何切换到 Transform API?

    摘要: 如果你的 Android 构建中涉及到字节码插装(bytecode instrumentation),或者应用中提供了进行插装的插件,并希望它能支持 Instant Run,那么你必须切换到 Transform API。

    目前,字节码插装虽然可以添加到构造过程中,但还没有对应的 API。通用的方法是找到 dx 任务,抓取其输入,并替换成自己的输出。随后,任务依赖就不得不重新连接,以便将新的中间任务纳入。

    该方法存在一定的问题,原因如下:

    -无法区分某些输入(如子模块与外部库)

    -主要 dex 类列表的计算也必须包含插装输出,因此增加了处理多个遗留dex的难度。

    -将一个以上第三方插装合并时会非常不稳定,而且容易被破坏。

    除此之外,该方法不支持 Instant Run。尽管原始构造的APK的确能通过常规的构建步骤,热调换(hotswap)模式却可运行不同的任务。

    在常规构造中,Instant Run添加了以下步骤:

    -用项目类插装为代码替换添加间接法。

    -复制类,以便在随后进行比较并生成覆盖类

    然而,必须在任何第三方插装之后,才能执行此步骤,而以前的插装机制(在最后dx之前添加)不可能出现这种情况。

    在hotswap构造时, Instant Run 会运行 java 编译程序,并将输出与先前构造的输出进行比较,以生成覆盖类。随后, Instant Run 会运行不同的dx任务,该任务仅对覆盖类进行远距离交换。这一流程和常规的构造有很大差别,而且之前的连接插装方法也完全没有使用该流程。

    为了解决这个问题,我们创建了 Transform API 。目的在于提供将第一方和第三方插装连通并整合至构造流程的 API 。该 API 不处理Gradle任务,但处理需要插装的其他东西,用插件进行任务实体化和布线处理。

    访问http://tools.android.com/tech-docs/new-build-system/transform-api可了解更多关于transform API的信息

    目前, Transform API 还在测试阶段,我们希望能尽快进入平稳运行阶段,因此希望能得到你的建议。请加入我们的开发谷歌组,并提出建议:https://groups.google.com/forum/#!forum/adt-dev

    OneAPM Mobile Insight 以真实用户体验为度量标准进行 Crash 分析,监控网络请求及网络错误,提升用户留存。访问 OneAPM 官方网站感受更多应用性能优化体验,想阅读更多技术文章,请访问 OneAPM 官方技术博客

    本文转自 OneAPM 官方博客

  • 相关阅读:
    leecode-数组-27Remove Element-java
    win7未在本地计算机注册microsoft.jet.oledb.4.0+inetmgr
    VS2013+opencv2.4.9+MFC
    adb远程调试
    Service,测试
    symfony-表单学习
    Doctirne---查询更新等操作
    Doctrine2-完整创建数据库
    Doctrine2-基础概念
    twig模板基本学习
  • 原文地址:https://www.cnblogs.com/oneapm/p/5291182.html
Copyright © 2011-2022 走看看