2015-09-21 18:05 11237人阅读 评论(2) 收藏 举报
 分类:
Android(260) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

编译自己的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 可以有每个不同业务的不同参数。

Android实战技巧之四十一:制作自己的Android SDK的更多相关文章

  1. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  2. Android实战技巧:深入解析AsyncTask

    AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上 ...

  3. Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...

  4. Android实战技巧:ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...

  5. Android实战技巧之六:PreferenceActivity使用详解

    一.写作前面 当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置. 对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页, ...

  6. Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息

    AS中并没有独立的Module 工程,可是能够在普通的Project中增加Module.所谓的Module就是我们通常所指的模块化的一个单元.并经常以jar包的形式存在.以下以一个获取手机信息的样例演 ...

  7. Android实战技巧: ListView之ContextMenu无法弹出

    问题 Activity中使用了ListView作为布局.当每一列表项中含有默认能获取焦点的子View时有可能会对ListView的某些事件有影响: 1. OnItemClick 2. OnItemLo ...

  8. Android实战技巧:如何在ScrollView中嵌套ListView

    前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListVie ...

  9. Android实战技巧之三十八:Handler使用中可能引发的内存泄漏

    问题描写叙述 曾几何时,我们用原来的办法使用Handler时会有以下一段温馨的提示: This Handler class should be static or leaks might occur ...

随机推荐

  1. Iview+Vue CDN NetMvC 简单demo

    1.引用相关js文件 2.菜单采用静态数据加载 3.效果展示 4.代码下载 https://github.com/sulin888/NetVueAdmin.git

  2. hibernate_06_hibernate的延迟加载和抓取策略

    1.延迟加载 1>类级别的延迟加载 指的是通过oad方法查询某个对象的时候,是否采用延迟, session. load(Customer class1L) 类级别延迟加载通过<class& ...

  3. win 7 下安装GIT(亲测有效)

    我首先是百度到了这个网站:https://git-scm.com/download/win 当然由于外网访问速度的缓慢 可以直接在百度搜索下载自己对应的版本 这个网站上有下载链接,你可以根据你的系统选 ...

  4. 云-腾讯云-笔记:pom.xml 配置

    ylbtech-云-腾讯云-笔记:pom.xml 配置 1. pom.xml返回顶部 1.1 com.qcloud / 腾讯云 <!-- https://mvnrepository.com/ar ...

  5. day 72 Django基础七之Ajax

    Django基础七之Ajax   本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 六 同源策略与 ...

  6. 第十九篇:Mysql两次Group by和ip转数字作比较的一次优化

    业务场景:两张表,ipconfig_group表存了单位和 ip 起始段信息 visit_info表存储了访问次数,失败次数,访问流量,用户ip等信息 两张表的关系为:    一个部门下有若干ip段, ...

  7. Eclips安装STS(Spring Tool Suite (STS) for Eclipse)插件

    Spring Tool Suite(sts)就是一个基于Eclipse的开发环境, 用于开发Spring应用程序.它提供了一个现成的使用环境来实现, 调试, 运行, 和部署你的Spring应用程序.包 ...

  8. 【牛客Wannafly挑战赛12】小H和圣诞树

    题目 可以考虑边分治,对于某一种颜色,我们处理出分治边左右两边所有以这个颜色为端点的路径长度,之后随便拼一拼就好了 但是这样对于每一组询问都需要边分一遍,这样做复杂度是\(O(nm+n\log n)\ ...

  9. Nand Flash 控制器工作原理

    对 Nand Flash 存储芯片进行操作, 必须通过 Nand Flash 控制器的专用寄存器才能完成.所以,不能对 Nand Flash 进行总线操作.而 Nand Flash 的写操作也必须块方 ...

  10. JavaScript特效源码(1、文字特效)

    注:本文以及以下关于Javascript特效源码都是分享自JavaScript源码大全. 1.逐隐逐现的的特效 逐隐逐现的文字特效[推荐使用][适用于IE4++] (修改显示的文字后根据说明进行共2步 ...