【iapp钓鱼源码】【shell源码分析】【volley 源码分析】kotlin 实 源码

2024-12-28 15:19:26 来源:lettuce源码分析 分类:娱乐

1.[译]Kotlin的实源独门秘籍Reified实化类型参数(上篇)
2.compileDebugKotlin FAILED和aidl
3.如何学习Kotlin编程语言
4.Kotlin实现压缩插件ImageSlimming(一)

kotlin 实 源码

[译]Kotlin的独门秘籍Reified实化类型参数(上篇)

       本篇已经是 Kotlin 泛型系列第三篇,我们回顾一下前面两篇:第一篇讲的实源是泛型中的类型形参和类型实参,第二篇讨论了什么时候该使用类型形参约束。实源今天,实源我们将探讨Kotlin中独有的实源一种泛型特性——实化类型参数(Reified Type Parameters)。

       历史背景:泛型在 Java 中于 JDK1.5 版本引入,实源iapp钓鱼源码而集合 Collection 在 JDK1.2 版本就已经存在,实源后来加入了泛型版本的实源 List。在泛型出现之前,实源我们使用原生态的实源 List 表示。由于泛型擦除的实源存在,无论使用 List 还是实源 List,它们在运行时都表现为 List 类型,实源shell源码分析泛型信息在编译阶段被抹去。实源伪泛型虽然存在,实源但它在运行时并未保持泛型特性。与之相对,C# 采用的是真泛型,没有泛型擦除问题。Kotlin 虽然力求与 Java 互操作性,但也使用了伪泛型,存在泛型擦除。不过,Kotlin 提供了实化类型参数这一特性,让运行时依然能获取到泛型的volley 源码分析具体类型。

       实化类型参数适用于函数(或具有 get() 函数的扩展属性),且仅限于声明为 inline 内联的函数。当函数被标记为 inline 时,编译器会在每次调用处插入函数的字节码实现,从而在调用时获取具体实际类型信息。这正是实化类型参数的工作原理。

       让我们举例说明在哪些场景中应该使用泛型类型参数引用而不是真实的类名。通常情况下,当我们在源码中编写类名时,案例 1-5 是可以使用类型参数(如 T)替代 Thing 类的场景。对于案例 6-,如果要将类型参数(如 T)替换为具体类名(如 Thing 或 ExceptionalThing),c APP 源码最终会导致编译器错误。

       让我们详细看看实化类型参数的实际应用。以一个 User 类为例,假设我们想要反序列化一个 JSON 字符串。在 Java 的序列化库(如 Gson)中,通常需要将 Class 对象作为参数传递,以便知道想要的类型。使用实化类型参数,我们可以创建一个包装 Gson 方法的轻量级扩展函数:

       通过这种方式,我们可以在 Kotlin 代码中反序列化 JSON 字符串,而无需传递类型信息。Kotlin 会根据其使用方式推断出类型,河南麻将源码例如将结果分配给 User 类型的变量时,它会使用此类型作为 fromJson() 的类型参数。这样不仅简化了代码,还避免了在不同场景中重复传递类型信息的繁琐。

       实化类型参数的使用场景还包括:简化序列化与反序列化过程、避免繁琐的类型信息传递、以及利用类型推断优化代码结构。Kotlin 的这一特性使得泛型使用更加灵活,提高了代码的可读性和效率。

       接下来,下篇译文将深入探讨实化类型参数,敬请期待。如果您对 Kotlin 技术感兴趣,欢迎加入 Kotlin 开发者联盟,获取最新技术文章和社区资源。

compileDebugKotlin FAILED和aidl

        自从入职CS,项目编译一直有个神坑报错,每次都需要clean rebuild若干次, 非常耽误时间

        简单的说, 如果在使用AIDL时需要一个自定义的数据类型, 我们一般会这么写:

        当我们写一个子类SubClass继承该类.然后在Kotlin文件中直接或者间接引用到SubClass时, 就会出现一个以下的报错

        报错发生在 app:compileDebugKotlin , 也就是kotlinc. 但是我们明明已经定义了该类. 全局搜索发现有两个 CustomParcel.java, 推测是两个同名的文件引起.

        除了我们自己写的Java文件, 另外一个肯定是aidl生成的. 引用一张图:

        在编译开始时会把aidl转化为Java文件, 接下来才会经过javac, kotlinc把JVM语言文件转化为字节码 .class 文件.

        查看aidl生成的文件, 发现是空的, 并且有一行注释: 说明这是一个 PlaceHolder, 也就是占位文件.

        网上搜到有人遇到了 相同的问题 ,问题确实发生在kotlinC编译器以aidl生成的空java文件为编译目标, 而不是真正的java类文件. 并且也给出了解决办法,升级buildTools版本.

        查看 buildTools提交记录

        提交记录: No java output for parcelable declaration. 也就是移除了以下的为自定义的aidl Parcelable类生成Java文件的设定(.0.2之前的实现)

        升级.0.3, 再次编译, 发现build/aidl目录下不再生成同名的 PlaceHolder文件了, 只剩下唯一的我们自己的文件, kotlinC这次只能用唯一的文件来编译,报错解决.

        至于为什么有时候clean rebuild能编译成功,需要探究下kotlinC的源码.

        最坑的是, .0.2就是 gradle plugin4.1默认支持的版本 , 所以你不手动指定buildTools版本为.0.3以上就会掉进坑里.

如何学习Kotlin编程语言

       ä¸ºä»€ä¹ˆè¯´ Kotlin 是优秀的

       æœ¬æ–‡ä¸ä¼šåƒä¸€èˆ¬ä»‹ç»è¯­è¨€çš„文章那样,一开头就罗列出语言那些酷炫的特性,我们稍后再来探讨这些内容。

       é¦–先我将介绍一些其它的信息,因为 年一项研究显示,当开发者评估一种编程语言时生态系统要比语言特性更重要。这符合我个人的经验,下面就让我开始介绍吧:

       Kotlin 被编译成 JVM 字节码或者 JavaScript 代码。Java 开发者将会是对它最感兴趣的人,不过对于使用垃圾收集运行时语言的开发者而言它也具有一定的吸引力,比如 Scala、Go、Python、Ruby 和 JavaScript 等语言。

       Kotlin 来自业界,而不是学术界。它解决了开发者现今面临的实际问题。例如它的类型系统可以帮助你避免空指针异常。

       åˆ‡æ¢åˆ° Kotlin 无需成本!它是开源的但这不是重点,重点是它提供了一个高质量的一键从 Java 转换到 Kotlin 的工具,并且十分关注 Java 二进制文件的兼容性。你可以将现有 Java 项目的一次性转换成 Kotlin 项目,而该项目仍将可以正常编译,即使这是一个包含上百万行代码的复杂程序。

       æ˜¾ç„¶ä½ å¯ä»¥ä»Žä¸Šæ–‡å¾—知,Kotlin 程序能够使用所有现存的 Java 框架和库,甚至那些依赖注解处理的高级框架。它们之间的交互是无缝的,不需要包装或者适配层。Kotlin 可以整合 Maven,Gradle 以及其它构建系统。

       å®ƒååˆ†å¹³æ˜“近人,语法精炼直观,仅仅是阅读语言参考文档几个小时就能学会使用。Kotlin 看起来十分像 Scala 但是更加简洁并且兼顾了可读性。

       å®ƒä¸éµå¾ªç‰¹å®šçš„编程哲学,例如极度的函数式编程或者面向对象编程风格。

       å®ƒä¸ä¼šå¢žåŠ è¿è¡Œæ—¶çš„开销。Kotlin 的标准库十分小巧紧凑:专注于扩展 Java 标准库,编译阶段的大量内联操作意味像 map/filter/reduce 等管道结构函数将被编译成类似于命令式语言的代码。

       Anko 与 Kovenant 等框架的出现意味着在 Android 开发者中 Kotlin 开始变得流行起来。如果你正在从事 Android 相关的工作,相信你很快就会获得好的工作。你可以阅读这份 Square 公司开发者 JakeWharton 的报告,了解用 Kotlin 进行 Android 开发的体验。

       Kotlin 允许你继续使用你的工作效率提升工具。IntelliJ 的 IDE 对 Kotlin 的支持十分完善:你可以对代码进行重构、搜索、导航以及使用自动完成,而且 IDE 充分支持调试、单元测试、性能分析等等功能。

       é™¤äº† Android,我认为 Kotlin 还非常适用于企业中 Java 的应用场景。如果你的工作是整天埋头于大公司的代码库中,那么当 Kotlin 1.0 版本正式发布时你应该尽快去了解一下:

       ç”±çŸ¥åå…¬å¸ä¸ºå®ƒæä¾›å¼ºå¤§çš„商业支持。 JetBrains 这家公司 有一个高度称职的大团队致力于该项目,有稳定的商业模式甚至在自己的部分旗舰产品中使用 Kotlin,这表明短期内 Kotlin 不会被放弃。

       ä½¿ç”¨ Kotlin 风险较低:可以由一两个感兴趣的团队成员在项目中小范围的试验 Kotlin,这并不会扰乱你的项目,因为 Kotlin 的类对外提供的 Java API 看起来就与普通的 Java 代码一样。

       å› ä¸º Kotlin 十分注重语法的可读性,代码审查不会成为问题,对 Kotlin 不熟悉的团队成员仍然能够完成该工作。

       Kotlin 基于 Java 6,所以假如你难以在项目中升级使用新版本的 JVM,你可以使用 Kotlin。

       ä»Šå¹´æ—©äº›æ—¶å€™æˆ‘向 Swiss Re 这家瑞士再保险公司的团队(他们使用 Java 和 .NET)展示了 Kotlin。首先我定义了一个简单的 Java 类包含一些字段以及 toString、equals、hashCode 等方法,大概有 行代码。然后我将它转换成 Kotlin 代码(大部分是自动完成的),结果仅剩 1 行代码,接着我还演示了其它节省时间的特性。他们看过后对 Kotlin 充满了热情并且认为 Kotlin 是它们项目中 C# 语言的一个潜在竞争对手。

       æˆ‘认为 Kotlin 正中企业 Java 开发者的红心,所以尽管 Kotlin 是免费的,JetBrains 还是能够通过它增加商业版本 IDE 的销售来赚大钱。这将激励他们根据用户的意愿持续改进它。

       ä¸Žæ­¤ç›¸æ¯”,对于那些由不相关产品资助的语言开发者来说,当用户需求与之前的设计理念冲突时,他们很少会因此作出调整。

       ç‰¹æ€§

       Kotlin 作为一门新的编程语言能够脱颖而出,是因为它关注生态系统:JetBrains 懂得生产力的高低更多的取决于生态系统而不是便捷的语法。

       å°½å¿«å¦‚此,Kotlin 还是有许多有用的特性能让你编码的过程变得愉快:

       æˆ‘们已经提过 null 安全(可选),它能够让编译器系统的标记潜在的空指针引用。与一些语言不同的是它不涉及 option 类,因此是零开销的,并且还有其它语言特性确保它不会造成不便。

       ç²¾ç‚¼çš„语法:无处不在的类型推断、简单的函数只需要一行、简单的结构以及 JavaBeans 也只需要一行就能声明、真正的属性——可以在背后自动生成 getFoo/setFoo 方法用于与 Java 进行交互、函数可以独立存在于类之外。

       å¼‚常均为非检查型。(译者注:感兴趣的可以阅读一下Java 理论与实践: 关于异常的争论)

       ä½¿ç”¨ data class 关键字创建数据类会自动生成通用方法,例如 equals、hashCode、toString 以及 copy 和 componentN(同时声明多个变量时会调用该方法)。这将帮助你在不使用构建器的情况下便捷的获得不变类(immutable classes)。

       ä½†å¦‚果你需要构造复杂的结构体,借助类型安全的构建器这个特性可以简洁的实现。如果你使用 Google Protocol Buffers 来存储结构化数据, 通过 KBuilders 这个库也能很轻易做到。

       æ”¯æŒå‡½æ•°å¼ç¼–程以及零开销的 lambda 表达式,能够在 Java 的集合中做 Map、Filter、Folder 等处理。Kotlin 的类型系统能够自动识别可变或者不可变的集合。

       æ‰©å±•å‡½æ•°ç‰¹æ€§èƒ½å¤Ÿè®©ä½ åœ¨ä¸æ”¹åŠ¨æºç çš„情况下为类添加方法。乍眼一看以为是为了避免写出像 FooUtils 这种风格工具类的语法糖,不过随着使用的加深,你会认识到它不仅能帮你更加容易的通过自动完成使用方法,还能协助你集成现有的 Java API 以及借助其它 Kotlin 特性构建功能强大的扩展。

       æ”¯æŒè¿ç®—符重载,但是不会像 Scala 或者 Perl 那样出现难以理解的代码。运算符被映射成相应名字的方法,通过重写这些方法改变运算符的行为(包括函数调用),但是不能定义新的运算符。这使得程序能够兼顾功能与可读性。

       Kotlin 没有宏或者其它的方式来重定义语言,但是通过这些精心设计的特性能够使第三方库自由的对它进行扩展,官方对集合类进行的扩展也只是小试牛刀而已,请看以下例子。

       æƒ³ä½¿ç”¨ fibers、actors 和 Go 风格的 channels?一个名为 Quasar 的库已经为你实现了。

       ä½¿ç”¨ Markdown 替代 HTML 来编写 API 文档,这样编写 JavaDocs 可比以前舒适多了。(译者注:JetBrains 提供了相应的文档生成器 Dokka)

       æ›´å¥½ç”¨çš„泛型。如果你没有完全掌握泛型参数中 super 以及 extends 的含义,别担心,这不是你的错。Java 的泛型的确令人费解,Kotlin 解决了这个问题。

       å§”托是一个大家都知道的设计模式,Kotlin 原生支持它。

       == 运算符的行为符合预期(译者注:简单来说 a == b 相当于 a.equals(b);新增了 === 运算符,用来判断运算符两边是否指向同一个对象)

       æƒ³å¿«é€Ÿä¾¿æ·çš„进行异步编程吗?当然!

       å­—符串插值“可以使用这样的写法在字符创中直接引用变量 { this.example}”

       å‡½æ•°ä¸­çš„参数可以指定默认值、使用可变长度以及通过参数名传参。

       è¿˜æœ‰è®¸å¤šçš„调整与优化。假如 Java 中有某些让你觉得困扰的问题,我相信 Kotlin 一定已经把它处理好了。

       çŽ°åœ¨å°±æ¥è¯•ç”¨ä¸€ä¸‹ï¼

       è·Ÿå¾ˆå¤šçŽ°ä»£ç¼–程语言一样,Kotlin 可以通过网页浏览器来进行体验。不过跟其他语言不一样的是,Kotlin 的实验网站提供了一个成熟的 IDE,包括响应很快的自动完成,实时的后台编译,甚至还有在线的静态分析!

       åœ¨çº¿è¯•ç”¨ä¸€ä¸‹å§

       å¥½äº†ï¼Œè®©æˆ‘们继续接下来的内容

       ç›®å‰å­˜åœ¨å“ªäº›é—®é¢˜ï¼Ÿ

       ç”Ÿæ´»ä¸­æ²¡æœ‰ä»€ä¹ˆæ˜¯å®Œç¾Žçš„,包括 Kotlin。以下是我尝试这门语言时遇到的一些问题。

       æœ€å¤§çš„问题是不够成熟,因为 Kotlin 目前还处于 Beta 阶段,这意味着:

       æ¯æ›´æ–°ä¸€ä¸ªç‰ˆæœ¬ï¼Œè¯­æ³•ã€ABI 以及标准库就变一次。好消息是这些变化通常比较微小,可以借助 IntelliJ IDE 来自动升级你的代码,所以这个过程并不会太麻烦。

       Java-to-Kotlin 的转换工具(J2K)还没有完成。它偶尔会大规模的破坏和默默地擦除 Java 8 中的 Lambdas(修改: å¹´ 月:M 版本的转换工具已经可以正确地处理 Java 8 的特性了)。由它转换而成的代码并不总是最好的写法,但是 JetBrains 为这个工具付出了大量努力,它已经是我用过的语言转换工具中最好的了。所以我并不太担心这个问题,这个转换器正在迅速的改进中,变得越来越成熟。

       ä½ ä¼šé‡åˆ°ç¼–译器错误。尽管我的程序并不大,但还是会发生无法编译的情况,甚至错误的编译结果。诊断这些问题并不难,但终归还是影响了开发的体验。

       ä½ ä¼šé‡åˆ° IDE 内部错误。当这个错误发生时,IntelliJ IDE 会弹出一个悬浮窗口,附带向 JetBrains 报告的选项。大部分错误无需理会,不过依然会使人厌烦。

       å¶å°”会出现无法加载提示文档的错误(修改:M 版本发布后,这个问题已被修复)

       ç›®å‰ JetBrains 正致力于完善发布 1.0 版本而不是添加新的功能,期待这些问题能够得到修复。

       ç¬¬äºŒä¸ªæˆ‘遇到的比较大的问题是,有时与 Java 的交互会受到局限。

       ä¸€ä¸ªå…¸åž‹çš„ Bug 是 Java 的类型系统无法防止你改变 Map 中 Key 的类型。按理来说,这样操作应该导致编译器报错,例如使用类型错误的 Key 删除元素。有些 JDK 中的集合使用了泛型,它们某些重要方法的泛型参数是 Obejct,所以编译器不会提示。当在 IntelliJ IDE 中编写 Java 代码时会有静态分析的警告,但是目前 Kotlin 环境还没有这个功能。因为 Kotlin 使用的是 Java 的集合框架没有自己实现,所以这导致了一些类型安全方面的问题,我已经遇到好几次了。

       ï¼ˆä¿®æ”¹ï¼š1.0 Beta 版本中这个问题已经解决了,Java 中集合框架的类型安全缺陷在 Kotlin 已经不复存在。哟呵!)

       å¦ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œå½“调用或使用 Java 代码时 Kotlin 的 Null 安全特性无法发挥作用(可以借助注解弥补)。作为 Kotlin 的初学者,刚开始你可能会写许多调用 Java 库的代码,但是因为以上的问题它们并没有你想象中那么好用。这种情况的改善只能等待 Kotlin 使用人数的增长。JetBrains 一直在尝试使 Null 安全特性能体现在 Java 交互中,这种想法是好的,但有时考虑并太周全。(修改: 从 M 版本开始,在 Java 代码中将自动以 @NotNull @Nullable 等注解实现 Kotlin 的 Null 安全特性)

       è™½ç„¶æœ‰ä»¥ä¸Šçš„问题存在,但同时也使得我们能更流畅的使用 Java API,我觉得这种权衡是值得的,只是在开发中要注意。

       å…¶å®ƒéœ€è¦è€ƒè™‘的问题:

       Kotlin 的社区还比较小。虽然目前没有多少 Kotlin 的库可以使用,但是凭借优秀的 Java 交互能力,Kotlin 可以使用现有成熟的 Java 库。

       å¦‚果你喜欢看书来学习,那么你需要等到今年晚些时候才能看到 Kotlin 开发者写的书(译者注:Kotlin in Action)

       çº¯ç²¹çš„函数编程风格开发者可能会觉得类型系统中缺乏一些 Scala 或 Haskell 拥有的高级功能。如果你对类型系统一些功能比较看重,那么 Kotlin 可能不适合你。

       Kotlin 还能编译成 Javascript 代码,但是比较少用,所以可能会遇到更多的问题,这是我从论坛中得到的印象。(修改: 目前 Kotlin 的开发重心在于完成 1.0 版本并使其稳定运行在 JVM 中,Javascript 方面的问题将会在 1.0 发布后着手解决)

       æ²¡æœ‰æ ‡å‡†çš„编程风格指南,目前 Kotlin 提供了多种语法可供选择。不同人写出来的 Kotlin 代码很可能完全不一样。这与 Go 严格的风格形成了鲜明的对比。(修改: Kotlin 1.0 版本开始,一些灵活的语法已经被移除了,例如现在重载运算符以及定义中缀函数时必须分别使用 operator 和 infix 关键字进行标记)

       Kotlin 的编译速度稍稍慢于 Java,以及 IntelliJ IDE 的智能提示反应有点缓慢,不算严重而且比 Scala 快多了。(修改:Kotlin 1.0 开始编译速度有了明显提升)

       Kotlin 有一个 Eclipse 插件,但是很明显没有 IntelliJ 的好用。

       Kotlin 在某些方面比 Java 要严格。它不会自动将 Int 转换为 Long 类型,需要开发者显示的转换。这是因为 Kotlin 关注正确性和试图解决《Java Puzzlers》一书中提出的问题。JetBrains 声称他们已经搞定一半了。

       Kotlin 基于 Java 6,因此会受到它的局限。Kotlin 与 C# 在很多领域都很相似甚至比 C# 做得更好,但是它缺少一些功能,例如 Java 平台尚未支持的某些数据类型。

       ä¸ºä»€ä¹ˆåº”该开始考虑使用 JVM

       æœ€è¿‘一段时间我遇到了很多使用动态脚本语言(JavaScript 或者 Go —— 译者注:Go 应该是静态编译型语言)的创业公司。

       æˆ‘在 Bitcoin Space 工作的时候,使用动态语言是非常痛苦的事情。在这些语言里没有安全性的类型,这已经导致了巨大的货币损失。Go 比较少出错,但是在基础层面上给人的体验依然很差,比如说缺少好的调试工具,快速 GC 机制,稳健的管理器以及可靠的分析工具。

       è¿‡åŽ» 年或者更长时间里,Java 变得越来越健壮,越来越冗长,甚至有过度设计的迹象,这些变化很大程度上源于它的声誉。企业级 Java 类的名字 PathVariableMapMethodArgumentResolver 就是例证。在很长一段时间里我没有考虑 JVM,我确信这种环境并不适合我。

       æœ€ç»ˆæˆ‘因为 Android 被迫回到 Java,发现 Java 的开发环境已经改变了。虽然 XML 仍然不合时宜的频繁出现在各种场合,但是一些基础功能十分完善,令人印象深刻。 IntelliJ 是比 Eclipse 更快并且更智能的 IDE。Maven 一出现就得到了迅速的发展,拥有许多原本我想要其它构建 / 依赖系统增加的功能。较新的 Web 框架像 Ninja 和 Play 从类似 Ruby on Rails 的框架中学到了轻量简洁。有大量的库可供使用。硬件性能变得更高以及 JVM 变得更有效率,等等转变。

       æ²¡æœ‰çœŸæ­£æ”¹å˜çš„是语言本身,Java 代码写起来依然是令人不快的冗长。

       çŽ°åœ¨æœ‰äº† Kotlin,完全无需承受离开 Java 现有的生态系统的疼苦。你可以编写更富有表现力的代码,但是却比脚本语言更简洁,同时拥有更好的性能和更少的错误。

       å¦‚果你喜欢 JavaScript,可以尝试 Kotlin 的 JS 后端,或者在 Nashorn JS 引擎里运行你现有的代码。

       æœ€åŽï¼Œå¦‚果你喜欢 Go 语言是因为它可以编译独立运行的程序,那么试试 javapackager 工具。Kotlin 在本地为每个平台创建了捆绑包,这意味着在 linux 上不需要 JRE 的依赖就可以独立自主的获取 DEBs(linux 的安装包)或者压缩包。当然,它拆包之后不是单个文件而是单个目录,从部署的角度来看并不难操作。

       ç®€è€Œè¨€ä¹‹ï¼šå¦‚果你之前因为看 Java 不顺眼而忽略了 JVM 的生态系统,那么你应该借着 Kotlin 这门新语言进入这个世界瞧瞧。

Kotlin实现压缩插件ImageSlimming(一)

       简述: 从零开始,使用Kotlin开发AndroidStudio压缩插件ImageSlimming的全过程,包括导学篇、基础篇和实战篇。文章总三篇,旨在提高项目开发效率,减少压缩的繁琐步骤。

       一、为什么要撸一个压缩插件?

       在项目开发中,处理是常见需求。一般开发者会在使用前进行压缩,传统方法是使用TinyPng在线服务,需要多次操作和下载,耗时且繁琐。ImageSlimming插件通过利用TinyPng API,提供一键压缩的功能,节省时间,提升工作效率。

       二、插件的基本描述

       ImageSlimming是一款基于TinyPng API的压缩插件,使用Kotlin编写,并配合Java Swing框架设计用户界面。支持AndroidStudio、Intellij IDEA、WebStorm等JetBrains全家桶系列IDE。

       三、插件支持的功能

       具体功能包括但不限于批量压缩、自动上传至TinyPng、压缩结果自动下载等。插件旨在简化处理流程,提高开发效率。

       四、插件开发使用到的技术点

       开发过程涉及Kotlin语言、TinyPng API集成、Java Swing框架应用、插件开发规范等技术点。通过这些技术,实现插件的自动化功能,提升用户体验。

       五、插件的使用步骤

       插件使用步骤包括安装、配置TinyPng API密钥、选择需要压缩的、执行压缩操作、查看压缩结果等。具体步骤详细说明将在后续文章中阐述。

       六、插件源码和插件包下载

       插件已发布至jetbrains仓库,正在审核中。预计不久后即可在AndroidStudio或其他JetBrains全家桶插件市场中搜索并下载。插件源码及下载链接将在后续文章中提供。

       欢迎关注Kotlin开发者联盟,获取最新Kotlin技术文章及国外技术翻译。喜欢Kotlin的朋友,欢迎加入我们的社区。

本文地址:http://abssuliao.net/html/21a462995349.html 欢迎转发