Native Code 根本上都是和 NDK 打交道,全部工作流控制起来很多很麻烦。如不雅你懂得 C/C++,那最好不过,不然你要花大年夜量的时光去进修新器械。Gradle 和 Android Studio 对 NDK 的支撑场不好,当你测验测验着去应用 NDK 模块的时刻,他会警告你说:当前 NDK 已经不被支撑了。Google 如今在尽可能的去让 Gradle 支撑去支撑 Native 插件。在此之前,我们照样必须到手动的搭建全部对象链棘手动的编译以及把编译出来的文件拷贝到精确的地位。
碰到 NDK 不被支撑的警告要做呢?一个办法是忽视警告,因为它依然可以工作。得留心的是,如今没有对 ldFlags 的定义,是以你不克不及为链接器指定 flag 参数。如不雅你须要这些参数,另一个办法是应用 Native 插件。这个办法可能很快就被放弃了,他须要你本身处理零丁的对象链的搭建以及将生成文件年腋荷琐项目转移到对应的项面前目今。
如不雅你应用 jar 文件,若何才能包含基于 Native 实现的库呢?其实只用在 Building 的时刻动着四肢举动就好了。如下所示,修改你的 “jar” 义务就可以了。
- task androidJar(type: Jar, dependsOn: ['assemble']) {
- group 'Build'
- description 'blah blah'
- from zipTree('build/intermediates/bundles/release/classes.jar')
- from(file('src/main/jniLibs')) {
- into 'lib'
- }
- }
- 拥抱 Gradle:可能须要花时光进修,然则异常值。
- 摸索 Gradle 插件!稀有不清的插件,总有一款合适你。
- 主动化你的测试。尽可能的用 Jenkins和主动化对象。
- 如不雅你要开源你的炫酷组件,Bintray 是个浩揭捉?择。
Q: Jenkins 上用 Gradle 的优势有哪些? Emanuele:优势就是 Gradle 有一些设制揭捉?项,包含你在你电脑上运行的 Gralde 或者 Gradle Wrapper 版本,插件能在出问题的时刻让你经由过程 log 更轻易的定位到问题地点。
Q: 你提到注解很有效,因为他们是在编译的时刻处理问题,那么运行时的注解有没有什么特别之处? Emanuele: 如不雅你想的话,你也可以在运行时调用注解,履行反射操作。然则比拟于在编译时代处理慢很多。在 Android 上就更慢了,所以你用着用着就不想这么搞了。
Q: 你之前介绍了这么多有效的看维他们都邑对 Android 机能产生很大年夜影响么? Emanuele:不,我只是说你可以在编译时髦反射优化。有的时刻,只有运行时反射才能拿到一些你法度榜样履行时刻须要的信息,所以那种情况你也只能那样做了。
Q: 在处理注解的时刻, Javapoet 是个不错的看维但依然要攫取注解并且在类持续关系中寻找,你有没有处理这个的好的筹划? Emanuele: 很不幸,没有。事实上,javapoet 只能在你生成新的类的时刻帮到你。如不雅没有那么多的代码量,你也可以不消任何的看维只用模板。问题平日出在对象反射的限制上。你可以拿到注解的类,等等,然则往往无法反射内部的办法。为了实现这个,你须要操作字节码,听起来很恐怖,然则是可行的。有一个叫 Morpheus 的看维可以帮你做这些。
Q: 我测验测验过创建一个库,碰到了一个路径设置的问题,当时没有办法让 Gradle 明白我是在创建库而不是一个 App,你之前有见过如许的问题么? Emauele: 碰见过,你须要精确应用 Google Android 的 Gradle 插件,摸索一下他在哪里存储你须要的信息,你须要对这个比较懂得。
推荐阅读
今朝,当Go须要和C/C++代码集成的时刻,大年夜家最先想到的肯定是CGO。毕竟是官方的解决筹划,并且简单。调用C函数的时刻,必须切换当前的┞坊为线程的主栈,这带来了两个比较严重的问题:>>>详细阅读
本文标题:为什么要开发Android库?
地址:http://www.17bianji.com/lsqh/37244.html
1/2 1