安卓SDK开发的一些疑问

目前,公司需要开发一套iOS和安卓的sdk,主要包含蓝牙管理、网络请求、倒计时等方案执行、蓝牙数据交互等功能。之前没有过开发安卓sdk的经历,写个笔记用以记录。

现在iOS sdk已经写了一部分,安卓开发我也习惯从iOS的角度类比来开发,节省时间。在开始具体开发之前,先将几个问题具体弄清楚,然后再一步步具体进行。

问题1: 与iOS的类比,是否可以生成类似iOS的静态库.a或者动态库.dylib来给第三方使用?

在安卓开发中,并没有.a静态库和.dylib这种动态库,但是有另外类似的两种形式:JARAAR

  1. JAR(Java ARchive):这种库的形式主要用来封装java类(当然kotlin也是没有问题的),类似于iOS的.a静态库,但是只能包含java代码,不能包含资源文件(例如XML布局,Android的Manifest.xml,本地库(.so文件等))。
  2. AAR(Android 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仓库,如JCenterMaven CentralJitPack,然后在build.gradle文件中添加远程库依赖。这种方式最为常见,它也允许其他开发者很容易地使用和更新你的sdk

当然,也可以不发布到这些仓库。让开发者直接下载aar,然后放在libs目录下,然后在项目的build.gradle文件中添加本地库依赖。这种方式适用于SDK尚未发布,或只在少数项目中使用的情况。

第3中方式,也可以通过自己服务器分发或者私有Maven仓库来分发。

问题3:安卓封装成AAR的sdk,是否像sdk的动态库或者静态库那样,能看到对应的头文件及具体可以调用的方法?

两个平台还是有蛮大的差异。在iOS使用的.a静态库时,一般会将header头文件暴露给三方使用者,而具体实现则在.a里面变为二进制文件无法查看。但在安卓中,AAR中包含的实际上是Java的.classkotlin编译后的字节码。不考虑通过工具反编译等因素的话,直接是不能查看其源代码的。给第三方使用时,更加依赖于文档说明、示例代码等。

问题4:sdk如何设置具体开发?是否像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任务。

问题5:Android sdk开发,语言如何选择?java还是kotlin?

在iOS的sdk开发上,我选择了Objective-C。主要出于两个原因:

  1. 我个人感觉,Objective-C这种将声明和实现分分别在两个文件中来写的语言,天然地更加适合sdk开发。私有的属性和方法,可以直接写在.m文件中,给三方调用的,直接写在.h中,更加清晰。虽然调试过程中,私有的属性和方法等,不可避免地也会暴露,但是在正常情况下,它更加简单和容易。
  2. Swift苹果也推了好多年了,但是,在互操作性方面,在Swift里面调用oc代码,基本上没有什么问题。但是反过来可能就有些问题。毕竟Swift与OC相差年代太多了,两者不是一个代际的语言,Swift上面有许多特性,OC并不支持。比如泛型枚举的关联值结构体协议扩展某些类型的方法重载,这些在OC中都无法使用。在设计SDK时,需要注意公开API要遵循Objective-C的特性和约束。与其各种注意,不如直接用OC来开发。在兼容和稳定性方面应该问题更小。

而在Android SDK的开发上,同样是Google推出的新语言kotlin,它与Java之间的互相调用却更加无缝,虽然它们之间也有着一些细微的差异和限制。并且,kotlin和java都是一个类为一个单文件的代码,并没有oc和kotlin那种巨大的差异。所以,我个人感觉,可以直接使用kotlin,还可以利用kotlin中的协程等更加强大的特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

灵眸:2023年上半年中国主要消费领域宏观数据概览报告(附下载)

关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 2023年上半年中国社会消费品零售总额22.8万化元。2023年上半年中国电商实体商品消费总额达6.1万亿元,同比增长10.8%。2023年上半年中国餐饮、汽车消费均超2万化元,餐饮、金银珠…

如何预防ssl中间人攻击?

当我们连上公共WiFi打开网页或邮箱时,殊不知此时可能有人正在监视着我们的各种网络活动。打开账户网页那一瞬间,不法分子可能已经盗取了我们的银行凭证、家庭住址、电子邮件和联系人信息,而这一切我们却毫不知情。这是一种网络上常见的“中间…

Mysql整理

一、基础概念 1. 索引 之前的文章已经写过了,比较细 数据库索引含义,类别,用法,创建方式_表结构加树形id和索引是为什么_马丁•路德•王的博客-CSDN博客 简单概括就是在表的某个列或者多个列或者联合表的时候加个索引,类似图书馆书本的索引编号&…

PK Nounique CASCADE DROP INDEX keep index

Explicit Control Over Indexes when Creating, Disabling, or Dropping PK/Unique Constraints (Doc ID 139666.1)​编辑To Bottom PURPOSEIn Oracle 9i, the DBA has an explicit control over how indexes are affectedwhile creating, disabling, or dropping Primary Ke…

AI Deep Reinforcement Learning Autonomous Driving(深度强化学习自动驾驶)

AI Deep Reinforcement Learning Autonomous Driving(深度强化学习自动驾驶) 背景介绍研究背景研究目的及意义项目设计内容算法介绍马尔可夫链及马尔可夫决策过程强化学习神经网络 仿真平台OpenAI gymTorcs配置GTA5 参数选择行动空间奖励函数 环境及软件…

数据结构与算法-排序

目录 数据结构与算法 为什么要学习数据结构和算法? 常见的数据结构 常用算法

【雕爷学编程】Arduino动手做(13)---TTP223B电容式触摸模块之通过串口监视器检测电容触摸键的状态与控制继电器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

【OS】请问,一个需要运行内存10GB的游戏,可以运行在32位物理内存为64GB的电脑上吗?

答案: 可以 解释 操作系统虽然是32位,限制了电脑的虚拟内存最大值为 4GB。如果,电脑开启了虚拟内存,则该款10GB运存的游戏是不可能开启的。期望开启这款游戏的做法是,在这个物理内存为64GB的电脑上关闭虚拟内存机制&…

C语言学习笔记 使用vscode外部console出现闪退-12

前言 在使用vscode的外部console时,会出现闪退现象,这是因为程序运行结束后,系统自动退出了终端(终端机制决定的)。我们可以在C程序结束后,使用system函数来暂停DOS终端系统,这样就可以完整地看…

SAP Fiori 问题收集

事务代码篇 启动工作台:/N/UI2/FLP 错误日志: /n/IWFND/ERROR_LOG 服务清单: /n/IWFND/MAINT_SERVICE 创建语义对象:/N/UI2/SEMOBJ 创建目录:/N/UI2/FLPD_CONF(cross-client)或 /N/UI2…

爬虫018_urllib库_cookie反爬_post请求百度翻译获取百分翻译内容_以及详细翻译内容---python工作笔记037

然后我们来看如何用urllib发送post请求,这里我们 用百度翻译为例 我们翻译一个spider,然后我们看请求,可以看到有很多 找到sug这个 可以看到这里的form data,就是post请求体中的内容 然后我们点击preview其实就是 返回的实际内容 然后请求方式用的post 然后我们把上面的信息…

maven是什么?安装+配置

目录 1.什么是maven? 1.2.maven的核心功能是什么? 2.Maven安装配置 2.1Maven的安装 2.2Maven环境配置 1.配置 MAVEN_HOME ,变量值就是你的 maven 安装的路径(bin 目录之前一级目录) 2.将MAVEN_HOME 添加到Path系…

Groovy语法

工程目录 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:LearnGroovy 参考文献 配置Groovy开发环境(Windows)IntelliJ IDEA创建第一个Groovy工程基于IntelliJ IDEA创建第一个Groovy工程

Ubuntu18.04版本安装ROS及出现错误的处理方法

前面的文章是在已安装的ROS基础上做的一些应用,这里我们从零开始安装ROS机器人操作系统。 机器人操作系统(Robot Operating System,ROS)是一个开发机器人软件的框架,里面包含了一系列的工具,库和惯例,目的在于简化在大量不同种类机…

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到,发现flink运行一段时间后,不再继续消费的问题。这个问题困扰了我非常久,一开始也很迷茫。又因为比较忙,所以一直没有时间能够去寻找答案,只是通过每天重启…

函数的模拟实现

题一&#xff1a; 模拟实现strncpy #include <stdio.h>void my_strncpy(char* arr2, char* arr1, size_t num){int i 0;for (i 0; i < num; i){*(arr2 i) *(arr1 i);}}int main(){char arr1[] "hello liangzai";char arr2[10] { 0 };//strncpy(ar…

Ansible Handlers模块详解,深入理解Ansible Handlers 自动化中的关键组件

深入理解Ansible Handlers 自动化中的关键组件 在现代的IT环境中&#xff0c;自动化已经成为提高效率和减少错误的关键。Ansible作为一款流行的自动化工具&#xff0c;通过使用Playbooks来定义和执行任务。而Handlers作为Ansible的组件之一&#xff0c;在自动化过程中发挥着重要…

Linux 基础(四)常用命令-日期 用户权限

日期 & 用户权限 日期用户权限用户用户组用户权限 日期 获取当前日期时间 date设置时间 date -s "yyyy-MM-dd HH:mm:ss"或 timedatectl set-time YYYY-MM-DD HH:MM:SS校准时间&#xff08;如本地时间不准&#xff09; # 开启后自动校准时间 sudo timedatectl…

安装elasticsearch

一、docker安装elasticsearch 1、下载镜像 docker pull elasticsearch:6.5.4 2、启动容器 docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.typesingle-node" \ -e "cluster.nameelasticsearch" \ -e "ES_JAVA_OPTS-Xm…

Java生成文件到ftp服务器

废话不多说&#xff0c;直接上代码&#xff0c;拿去直接可以使用。 如果小伙伴们没有可以测试ftp服务器&#xff0c;可以在自己的本地搭建一套ftp服务&#xff0c;步骤也很简单 传送门&#xff1a;Windows下如何搭建FTP服务并且设置其用户名和密码 (taodudu.cc) 一.引入依赖…