广告品牌设计机构网站织梦模板,如何给公司做网站,有没有建网站的app,wordpress wjj目前#xff0c;公司需要开发一套iOS和安卓的sdk#xff0c;主要包含蓝牙管理、网络请求、倒计时等方案执行、蓝牙数据交互等功能。之前没有过开发安卓sdk的经历#xff0c;写个笔记用以记录。
现在iOS sdk已经写了一部分#xff0c;安卓开发我也习惯从iOS的角度类比来开发…目前公司需要开发一套iOS和安卓的sdk主要包含蓝牙管理、网络请求、倒计时等方案执行、蓝牙数据交互等功能。之前没有过开发安卓sdk的经历写个笔记用以记录。
现在iOS sdk已经写了一部分安卓开发我也习惯从iOS的角度类比来开发节省时间。在开始具体开发之前先将几个问题具体弄清楚然后再一步步具体进行。
问题1: 与iOS的类比是否可以生成类似iOS的静态库.a或者动态库.dylib来给第三方使用
在安卓开发中并没有.a静态库和.dylib这种动态库但是有另外类似的两种形式JAR和AAR。 JAR(Java ARchive)这种库的形式主要用来封装java类当然kotlin也是没有问题的类似于iOS的.a静态库但是只能包含java代码不能包含资源文件例如XML布局Android的Manifest.xml本地库(.so文件等)。AARAndroid ARchive这是Android特有的一种库它包含了JAR库以及其他资源例如XML布局AndroidManifest.xml本地库(.so文件)等类似iOS的.framewrk。
一般情况下我们会将Android库打包成AAR文件然后在需要的项目中添加对应的依赖。在Android Studio中可以使用Gradle构建工具来生成AAR文件然后在需要使用SDK的项目中在build.gradle文件中添加对应的依赖。
例如
dependencies {implementation fileTree(dir: libs, include: [*.jar])implementation com.example:my-sdk:1.0.0
}需要注意的是使用AAR文件并不能完全隐藏SDK的实现细节。在Android中所有的Java代码都可以被反编译。如果想保护代码需要使用混淆工具例如ProGuard对代码进行混淆使得反编译后的代码难以阅读和理解。
问题2 使用gradle安装的sdk这个aar也像iOS一样有类似cocoapods的仓库吗
是的像iOS常用的cocoapods库一样在安卓中可以将sdk发布到Maven仓库如JCenter、Maven Central或JitPack然后在build.gradle文件中添加远程库依赖。这种方式最为常见它也允许其他开发者很容易地使用和更新你的sdk。
当然也可以不发布到这些仓库。让开发者直接下载aar然后放在libs目录下然后在项目的build.gradle文件中添加本地库依赖。这种方式适用于SDK尚未发布或只在少数项目中使用的情况。
第3中方式也可以通过自己服务器分发或者私有Maven仓库来分发。
问题3安卓封装成AAR的sdk是否像sdk的动态库或者静态库那样能看到对应的头文件及具体可以调用的方法
两个平台还是有蛮大的差异。在iOS使用的.a静态库时一般会将header头文件暴露给三方使用者而具体实现则在.a里面变为二进制文件无法查看。但在安卓中AAR中包含的实际上是Java的.class和kotlin编译后的字节码。不考虑通过工具反编译等因素的话直接是不能查看其源代码的。给第三方使用时更加依赖于文档说明、示例代码等。
问题4sdk如何设置具体开发是否像iOS按照cocoapods库开发一样麻烦呢
安卓开发在这种场景下反而比iOS要简单不少。在Android Studio中直接创建一个Library模块然后按照自己规模的模式进行封装和开发即可。本身这个模块也可以很方便地配置自己所依赖的三方库等。而在iOS的SDK开发中需要依赖CocoaPods或者Carthage等工具。
在整个SDK开发完成后也可以用如下简单的命令来生成AAR文件。
./gradlew :my-sdk:assembleRelease这个命令则会在my-sdk/build/outputs/aar/目录下生成一个名为my-sdk-release.aar的文件假设模块的名字是my-sdk。然后便可以将这个AAR文件分发给其他的开发者或者上传到Maven仓库中供其他人使用。
也可以通过Android Studio的界面来执行这个构建任务。具体在Gradle窗口中找到你的模块展开Tasks-build然后双击assembleRelease任务。
问题5Android sdk开发语言如何选择java还是kotlin
在iOS的sdk开发上我选择了Objective-C。主要出于两个原因
我个人感觉Objective-C这种将声明和实现分分别在两个文件中来写的语言天然地更加适合sdk开发。私有的属性和方法可以直接写在.m文件中给三方调用的直接写在.h中更加清晰。虽然调试过程中私有的属性和方法等不可避免地也会暴露但是在正常情况下它更加简单和容易。Swift苹果也推了好多年了但是在互操作性方面在Swift里面调用oc代码基本上没有什么问题。但是反过来可能就有些问题。毕竟Swift与OC相差年代太多了两者不是一个代际的语言Swift上面有许多特性OC并不支持。比如泛型、枚举的关联值、结构体、协议扩展和某些类型的方法重载这些在OC中都无法使用。在设计SDK时需要注意公开API要遵循Objective-C的特性和约束。与其各种注意不如直接用OC来开发。在兼容和稳定性方面应该问题更小。
而在Android SDK的开发上同样是Google推出的新语言kotlin它与Java之间的互相调用却更加无缝虽然它们之间也有着一些细微的差异和限制。并且kotlin和java都是一个类为一个单文件的代码并没有oc和kotlin那种巨大的差异。所以我个人感觉可以直接使用kotlin还可以利用kotlin中的协程等更加强大的特性。