版权声明:本文为博主原创文章,未经博主允许不得转载。
编译自己的SDK
特种设备会有一些额外的功能,这样就需要给应用层提供特定的API,从而需要定制自己的SDK。
编译自己的sdk还是很简单的,因为google帮我们做好基础工作,步骤如下:
$ source build/envsetup.sh
$launch 'what you want'
$ make update-api
$ make PRODUCT-sdk-sdk -j8
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
如果一切顺利的编译完成,那么恭喜你。如果遇到错误也不要紧,因为这是正常的。下面列出我遇到的主要错误:tools/base没有。
error1:
sdk/eclipse/scripts/create_all_symlinks.sh: line 285: cd: tools/base: No such file or directory
...
sdk/eclipse/scripts/create_all_symlinks.sh: line 285: cd: tools/base: No such file or directory
...
sdk/eclipse/scripts/create_all_symlinks.sh: line 47: cd: tools/base: No such file or directory
make: *** [out/host/linux-x86/obj/EXECUTABLES/monitor_intermediates/monitor] Error 1
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
modify create_all_symlinks.sh
将文件中所有需要tools/base的地方都注释掉。
error2:
sdk/build/tools.atree:124: couldn't locate source file: tools/base/templates/projects
sdk/build/tools.atree:125: couldn't locate source file: tools/base/templates/activities
sdk/build/tools.atree:126: couldn't locate source file: tools/base/templates/gradle
sdk/build/tools.atree:127: couldn't locate source file: tools/base/templates/other
make: *** [out/host/linux-x86/sdk/android-sdk_eng.linc_linux-x86.zip] Error 44
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
modify tools.atree
$ vim sdk/build/tools.atree
- 1
- 1
# Templates
#tools/base/templates/projects tools/templates/projects
#tools/base/templates/activities tools/templates/activities
#tools/base/templates/gradle tools/templates/gradle
#tools/base/templates/other tools/templates/other
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
再次修改后就离成功不远了,下面是成功的log。
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.linc_linux-x86.zip
SDK: warning: including GNU target out/target/product/generic/system/lib/libgccdemangle.so
- 1
- 2
- 3
- 1
- 2
- 3
使用SDK
将Android-sdk_eng.linc_linux-x86.zip解压到你喜欢的目录,在Android Studio的设置如下:
File—>Project Structure—>SDK Location,填写你刚刚解压的目录即可。
试着用自定义的API做测试吧,good luck!
参考:
http://blog.csdn.net/edsam49/article/details/44996353#reply
SDK 一般以一个或多个 jar 文件加上资源文件的形式对外开放,当然也可以把资源文件打包到 jar 中,这样别人接入你的 SDK 所需要的配置就非常简单了,只需要引入一个 jar 文件就可以了。 (我自己用的是第二种方式,资源文件包括图片、XML文件、动态链接库等)。
多数 SDK 都是需要 UI 的,有两种方式在一个 jar 里面实现 UI。第一种是用 Java 实现所有界面布局,很多 SDK 这样做,但这并不是最好的方法,这样实现起来麻烦,一个简单的界面要写很多的代码,维护肯定也不简单。第二种方法是像平常写 app 一样用 XML 写布局,然后用 aapt 编译这些 XML(不同于代码编译,实际上是把 XML 转换成另外一种 Android 的布局系统更容易解析的一种格式 :They call it compiled XML),在代码中通过反射使用 XmlPullParser,inflate 出 XML 中的布局,这样比 Java 实现要简单得多,代码也更容易维护。
目前应该也可以把 SDK 打包成 aar,那样应该就可以完全跟开发 app 一样了,不需要像上面那么复杂,但我没试过,不太清楚。目前市场上的 SDK 大多都还是 jar 的形式。
剩下的是一些个人实践中的一些总结,不一定对,仅供参考:
1. 暴露的接口尽可能少,最大程度减少 SDK 接入方需要了解的细节。
2. 统一所有接口调用方式,我实现过的一个 SDK 其中的一个接口签名:SDK.exec(Context, Action, Callback),Action 可以有每个不同业务的不同参数。