zoukankan      html  css  js  c++  java
  • Android实战技巧之四十一:制作自己的Android SDK

     
    标签: sdkandroid定制sdk
     分类:
     

    目录(?)[+]

     

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

  • 相关阅读:
    Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
    Android 解决listview中checkBox错位选择
    带checkbox的ListView实现(一)——数据与渲染完全分离的传统实现方式
    ViewPager + Fragment实现滑动标签页
    android中使用PopupWindow实现弹出窗口菜单
    Android TextView背景颜色与背景图片设置
    Android特效 五种Toast详解
    Android 带checkbox的listView 实现多选,全选,反选
    android 截取指定位置字符串
    带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
  • 原文地址:https://www.cnblogs.com/timssd/p/6725890.html
Copyright © 2011-2022 走看看