Android4.4制作自有SDK探析
最近研究了一下android4.4制作自有SDK的东西。我们都知道,拿到Google的原始代码后,芯片公司会把它结合芯片去平台化,再发出芯片公司的SDK给客户,这种SDK通常情况下都是含全部工程代码环境的,当然里面有一些是以库形式发布的,是需要保密的。那么我们作为中游的技术公司,又有一定深度的功能定制、产品形态变更带来的SDK大量的修改,很多是费尽心血完成,当然这部分代码我们也是要完全保密的,及时我们把它包得再好,也费精力,还要给完整过程代码,好庞大,这种方式的延伸性不好,扩展性也不佳,同步代码相当的麻烦,那我们就可以把api留好,我们发布自己的SDK给第三方的合作方,这样第三方可以调到自己提供的私有api工作,又保护了自己的代码,也节省精力。那我们怎么制作SDK呢?下面介绍一下: /****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/
Android4.4代码量是相当巨大的,首先我们需要设置一下环境:
$. Build/setupenv.sh
如果是编译具体产品就是lunch具体的产品型号,再去make就可以了。
我们要的是SDK,直接使用“make sdk”是不行的,网上有一些网友有提到,笔者也试过,会报一个Bluetooth方面的错误,往下走还会有其他的错误,具体原因得好好分析一下编译系统才知道,按理说也可以走通,笔者未试过。笔者接着用的是“make PRODUCT-sdk-sdk”
$make PRODUCT-sdk-sdk
一开始编译也是大量的错误上来,首先就是“sdk/eclipse/scripts/create_all_symlinks.sh: 第 285 行: cd: tools/base: 没有那个文件或目录”
怎么办呢?有网友说用“repo init –g all;reposync”,笔者用的是芯片公司提供的SDK,不是原生的SDK,所以这种方法是不大可行的。在我们的SDK里面确实没有发现tools/base目录,那怎么办呢?先屏蔽掉吧!相关的屏蔽如下:
接着往下继续编译。又发现“device\generic\goldfish\camera\EmulatedCamera.cpp”这个文件有错误,只好手动把相应错误给亲手杀死,直接屏蔽。
继续往下走,顺利的话可以build一会,然后就到自己的修改的代码里面了,假如我们在开发中大量使用了overlay的话,可能会有不少错误上来,这主要源于我们平时开发不够严谨,假如是在代码里引用了一个资源的字符串,放在了overlay里面,你编译特定产品的时候,因为overlay里面有,当然不会报错,但是你编译sdk,那对不起,没那么好说话,直接是找不到资源,退出编译,还有一些布局的xml文件,图片文件,字符串都需要拷贝一份到原始代码位置,平时偷懒的后果就是编译sdk的时候巨大的惩罚,那一个一个错误上来,好烦人,死伤大脑细胞无数。
基于这一点,平时在做应用的时候,大家还是要严谨一些。养成一个好习惯,日后工作都会顺畅很多。
这些APK编译的问题都是可见的,也蛮繁重的,一个个来吧,没办法。接下来编译又遇到如下错误:
frameworks/base/core/java/android/widget/earthrotate/GLRender.java:44: error 104: @param tag with name that doesn't match the parameter list: 'degree:' frameworks/base/core/java/android/widget/earthrotate/GLRender.java:77: error 104: @param tag with name that doesn't match the parameter list: 'rox' frameworks/base/core/java/android/widget/earthrotate/GLRender.java:78: error 104: @param tag with name that doesn't match the parameter list: 'degree:' DroidDoc took 144 sec. to write docs to out/target/common/docs/offline-sdk 100 警告 make: *** [out/target/common/docs/offline-sdk-timestamp] 错误 45
后面看了一下,也就是注释的部分出的问题。 修改前后对比如下:
- /** - * dynamic rotation angle to rox - * @param rox - * @param degree: change degree every time - */ + /** + * dynamic rotation angle to rox + * + * @param rox the rox + * + * @param degree the degree change every time. + */ public void toRoatX(final float rox, final float degree) { int what = 1; float dx = rox - roatX; @@ -70,11 +72,13 @@ public class GLRender implements Renderer { h.sendEmptyMessage(what); } - /** - * dynamic rotation angle to rox - * @param rox - * @param degree: change degree every time - */ + /** + * dynamic rotation angle to rox + * + * @param roy the roy + * + * @param degree the degree every time. + */ public void toRoatY(final float roy, final float degree) { int what = 1; float dy = roy - roatY; (END)
差异一看就知道了,所以平时写这些注释也要严谨啊!
解决完这些自己埋下的隐患,继续往下走,会出现如下错误:
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.desheng_linux-x86.zip]错误 44因为没有tools/base,所以我们把它先屏蔽掉,继续编译,顺利完成!看到如下的图片,心中一阵窃喜。
生成的sdk在“android\out\host\linux-x86\sdk”下面,android-sdk_eng.desheng_linux-x86.zip,一个680M的大家伙!
接下来就是验证这个sdk是否可用了。
验证的方法也就是解压这个压缩文件,再拿一个需要调用私有api的应用去依赖这个sdk,编译一下,看看能不能编译通过,再推送到机器里面去跑一下就知道了。很幸运,笔者的sdk验证通过!
笔者验证的时候遇到新建项目会有些问题,主要是一些工具的问题,这可能跟 tools/base下面的东西有关,那么针对这个问题,我想可以这样去解决,用自己平时编译用的SDK环境,再替换相应api级下的android.jar即可,这种方法验证是可行的。
制作SDK还是蛮辛苦的一件事,辛苦归辛苦,后面工作高效了就是巨大的汇报!加油!