手机实时提取SIM卡打电话的信令声音-蓝牙电话的Android版输出sdk
手机实时提取SIM卡打电话的信令声音-蓝牙电话的Android版本-即将输出sdk
自蓝牙电话的方案输出以来,特别是基于Android手机的普通app+配件的方式来调用和提取手机外呼和通话的事件和声音的方案输出后,有很多使用和体验的用户和友商都在咨询,说这样的app方案,是否同步输出了对应的SDK。这样客户自己就能集成与整合到自己的app上,直接可以推送和应用到现有的客户上。
其实想想,这个需求也是非常的合理,毕竟我们自己出去对外宣传也是号称100%自研。^V^,谁会在乎你底层购买了谁的源码与方案呢?只要顶层封装的界面和业务是自己的、客户是自己的,核心竞争力就不会流失。在这个基础上增加新的功能、扩展新的能力,那就是持续的创新。
基于这个理念,哪怕OEM贴牌,都要贴出自己自主知识产权的标签。科技和产品的创新就是这样,人无我有,人有我优,非常的合理。
开放SDK后,蓝牙电话的方案对客户自身的设备数量和用户均不再进行限制,客户可将整合后的SDK做为自有产权的功能,进行客户推广和下级代理与分销的推广。
让所有客户在自己任意的app上,通过集成一个很小的SDK后,手机插上一个淘宝买的配件,就拥有局域网拨打电话的新能力,这是SDK输出最直接的目的。
我们经过逐层的拆解,将蓝牙电话方案的Android应用app 从功能组成上来分解,大致得出下述的组成和依赖关系,分别如下:
- 蓝牙协议栈需要依赖独立进程或独立子进程工作,SDK需要有自己的AndroidManifest.xml文件,因此输出的一定是aar包或类似的封装,不能封装为单独的jar+so库的方式。
- USB蓝牙需要应用app进行弹框授权后才能使用,因此app界面需要进行弹框授权及对应的逻辑处理。
- SDK可以输出无SIP模块的使用方式。如需要使用SIP转发到局域网,则需要监听网络状态变化和通话状态变化,此部分广播通知也会涉及弹框授权和处理。
- SDK的运行过程中,一定不能熄屏。手机熄屏会很大概率引起因功耗导致的链路工作状态不正常的问题。
- 悬浮窗和后台弹窗的权限也非常关键,通话时,Android手机所有的app通常都会被通话界面给遮挡或挤到后台,部分品牌的手机对处于后台的应用会进行清理,需要悬浮窗来进行应用的保活。
这样,将所有与界面无关的功能和逻辑全部封装到SDK中,允许用户在真正使用的时候在开启或初始化SDK,不用时第一时间停用和释放SDK(或插入USB蓝牙再才启用SDK,拔出USB蓝牙就停用SDK)。通过这些权限和功能封装,最大限度的减小SDK对用户原有app的业务冲击。
同时,SDK采用专门的加密和压缩方式,将SDK的体积尽量压缩到2MB左右,降低整合后app包的体积。
蓝牙电话Android版SDK的架构组成大致如下图所示:
之前蓝牙电话方案仅对外提供app应用安装包,我们前期的时候做了普适性的全量机型测试,适配了华米OV、三星酷派金立乐视等一系列手机,适配的Android版本从Android6 –Android14,均能正常安装和使用。
蓝牙电话方案对Android采用何种制式的SIM卡并无要求,理论上即使印度非洲北美等地的Android手机甚至是很多SIM卡的手机,也能采用此方案进行通话内容的处理。
经过一年多的沉淀,我们逐步的修复和完善app在使用过程中的一些使用场景上的问题,使方案的适应面更加的宽泛。但是通讯行业由于涉及一些法律法规的风险问题,以及客户行业的客户隐私数据等进一步安全需求的存在,在开放SDK授权和放开限制这方面,存在很大一部分的定制需求。
经过多轮的内部讨论和商议,也为了给客户规避商业风险,我们初步决定可以尝试放开授权,允许客户使用自己的app推广和发展用户和下游代理商;但是不能无限制的放开,需要有防止不受约束扩散的限制方式。
目前我们梳理了一下放开授权后可以有下述4种方式,有需求的客户或友商,可以看看假设有这方面的的需求或者想法,哪一种授权方式会更适合自己?
1、只限制app包名,包名相同的app不再限制任意数量的手机或其它设备安装,不限制时间。(跟我们现在的【智能拨号器app】相同,不做其它任何限制)
2、只限制Lincese,按年来授权,不再限制包名和应用,也不限制任意数量的手机。
3、针对部分需要多app的情况,可以对1和2进行同时约束,包名可以随意更换,费用方面会有适合的定位。
4、直接使用我们默认的智能拨号器app,不定制SDK,延续现有用户的使用方式。
这一轮操作,是建立在产品经过一个周期的沉淀后,功能和性能已经相对稳定的情况下,基于现在的用户数的基础上,进行的新一轮的开放性的调整。
毛主席曾经也说过,统一战线嘛,就是把自己人搞得多多的,把对手搞得少少的。一个产品或技术,如何能快速的体现它的生命力和商业价值?只有参与的人群足够的多,众人抬材火焰高,才能够更好和更快的实现它应有的价值。
最后的最后,还是再强调一句,所有的产品和功能,请在共和国法律法规的框架内使用,我们禁绝任何违法违规的使用方式,也请各位不要尝试触碰法律红线,这个也算我们的免责声明的一部分。
Android apk 打包流程
打包流程
①打包资源文件,生成R.java文件
打包资源的工具是aapt(The Android Asset Packaing Tool),位于android-sdk/platform-tools目录下。在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java。
②处理aidl文件,生成相应的Java文件
这一过程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述语言。位于android-sdk/platform-tools目录下。aidl工具解析接口定义文件然后生成相应的Java代码接口供程序调用。
如果在项目没有使用到aidl文件,则可以跳过这一步。
③编译项目源代码,生成class文件
项目中所有的Java代码,包括R.java和.aidl文件,都会变Java编译器(javac)编译成.class文件,生成的class文件位于工程中的bin/classes目录下。
④转换所有的class文件,生成classes.dex文件
dx工具生成可供Android系统Dalvik虚拟机执行的classes.dex文件,该工具位于android-sdk/platform-tools 目录下。
任何第三方的libraries和.class文件都会被转换成.dex文件。
dx工具的主要工作是将Java字节码转成成Dalvik字节码、压缩常量池、消除冗余信息等
⑤打包生成APK文件
所有没有编译的资源(如images等)、编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中。
打包的工具apkbuilder位于 android-sdk/tools目录下。apkbuilder为一个脚本文件,实际调用的是android-sdk/tools/lib/sdklib.jar文件中的com.android.sdklib.build.ApkbuilderMain类。
⑥对APK文件进行签名
一旦APK文件生成,它必须被签名才能被安装在设备上。
在开发过程中,主要用到的就是两种签名的keystore。一种是用于调试的debug.keystore,它主要用于调试,在Eclipse或者Android Studio中直接run以后跑在手机上的就是使用的debug.keystore。另一种就是用于发布正式版本的keystore。
⑦对签名后的APK文件进行对齐处理
如果你发布的apk是正式版的话,就必须对APK进行对齐处理,用到的工具是zipalign,它位于android-sdk/tools目录下。
对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。
对齐的作用就是减少运行时内存的使用。
转自CSDN
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。