在Android应用开发过程中,只要涉及两个或以上人的开发,就需要考虑分工和代码的组织和重用问题。

代码重用有三种方式:

1.APK;

2.JAR;通过Libs/ 和Build path集成,缺点是不能包含Android的资源;

3. Android Library Project;

三种方式的优劣分析,主要是JAR方式是以Binary方式重用的经典方式;

详见:http://www.slideshare.net/commonsguy/android-reuse-models

Android Library Project方式:

如果你有多个Android项目是共同的源代码和资源,你可以将它们添加到库项目,因此,它是跨应用程序和版本更容易维护。下面是一些常见的情况下,您可以使用库项目:

  • 如果您正在开发多个相关的应用程序,使用一些相同的部件,您将冗余组件出各自的应用项目,并创建一个单一的,可重复使用相同的组件库中的项目组。
  • 如果您要创建一个应用程序中存在的免费和付费两种版本。你移动到库项目中是常见的两个版本的应用程序的一部分。两个相关的项目,有着各自不同的包名,将引用库项目,只提供应用程序两个版本之间的差异。

  所以如果不想释放源代码的话,都必须使用JAR方式(Binary)。当然2和3可以结合使用;

I have the instructions in _The Busy Coder's Guide to Advanced Android
Development_ (http://commonsware.com/AdvAndroid), though the
instructions are new enough that none of my free versions have them.
Quoting some of the instructions from the current edition:

"You can create a binary-only library project via the following steps:
1. Create an Android library project, with your source code and such –
this is your master project, from which you will create a version of
the library project for distribution
2. Compile the Java source (e.g., ant compile) and turn it into a JAR file
3. Create a distribution Android library project, with the same
resources as the master library project, but no source code
4. Put the JAR file in the distribution Android library project's libs/
directory

The resulting distribution Android library project will have everything a
main project will need, just without the source code."

  当你需要重用资源的时候必须使用方式3。比较直接。

Android中库项目的使用方法图文介绍

http://www.jb51.net/article/32477.htm


  如果你的重用代码是native的,可以参考:http://kexanoids.blogspot.com/2012/02/android-native-libraries-modularity.html

Android native libraries modularity / code reuse

  


  顺便推荐一本不错的书,持续更新:

The Busy Coder's Guide to Advanced Android Development

[置顶] Android项目组织和代码重用的更多相关文章

  1. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  2. [置顶] Android Provision (Setup Wizard)

    Android中很多框架性的设计都已经存在了,但在市场上的发布版本里却因为没有很好的理解Android的设计意图而进行自己的定制,或者自己又做一 个冗余的实现.Android中的Provision其实 ...

  3. [置顶] Android布局管理器 - 详细解析布局实现

    布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...

  4. [置顶] Android AlarmManager实现不间断轮询服务

    在消息的获取上是选择轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如更新检查,可能是半个小时或一个小时一 ...

  5. [置顶] [Android源码分析]inquiry result引起的上层变化分析

    在上一篇文章中,我们详细分析了android是如何解析蓝牙反馈上来的搜索到的设备信息,本文将会继续分析这些信息到了上层之后是如何处理. 8.inquiry result引起的上层变化 我们知道inqu ...

  6. [置顶] Android四大组件之BroadcastReceiver

    Android四大组件之BroadcastReceiver Broadcast Receiver 广播接收器,是一种负责接收广播消息并对消息做出响应的组件,和Service一样并不提供与用户交互的UI ...

  7. [置顶] Android框架攻击之Fragment注入

    为了适应越来越大的设备屏幕,Android在3.X后引入了Fragment概念,作用是可以在一个屏幕上同时显示多个Activity,以达到充分利用屏幕的目的.关于Fragment的使用说明,可以阅读& ...

  8. [置顶] Android图片异步加载之Android-Universal-Image-Loader

    将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...

  9. [置顶] Android 状态栏那些小坑?

    背景:因为之前老板上次问我我们的app能不能自定义上面的状态栏我说可以啊!当时没管,今天试了下果然很多坑,之前github上也有很多大佬写了一个开源库有兴趣的可以点进去看下支持DrawLayout沉侵 ...

随机推荐

  1. C#委托的详细使用

    代码如下: public delegate void GreetingDelegate(string name);//定义委托,它定义了可以代表方法的类型 class Program { public ...

  2. python-文件压缩和解压

    import tarfile #压缩 tar = tarfile.open('your.tar','w') tar.add('ooo.xml',arcname='ooo.xml') tar.close ...

  3. Test failed.尝试加载Oracle客户端库时引发BadImageFormatException

    CodeSmith6.5不像前几个版本,需要用户手动添加oracle驱动,内部已经集成了oracle的驱动. 网上遇到很多win7 64位机子使用CodeSmith连接oracle的时候出现错误如下:

  4. (转)深入理解 __doPostBack

    在我的随笔<Page,你是怎样处理回发事件的?>中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__E ...

  5. .net framework版本以及服务器部署问题

    自己做了个官网,部署到服务器很多问题,发现targetframework为4.0,但是公司服务器的版本为:2.0.50727,但是公司一个项目用的lambda和linq就没有事,发现这个是3.5支持的 ...

  6. 慕课linux学习笔记(八)常用命令(5)

    解压缩命令 常用压缩格式 .zip .gz .bz2 .tar.gz .tar.bz2 zip [压缩文件名] [ 原文件 ] #压缩文件 -r [压缩文件名] [ 源目录] #压缩目录 -r [压缩 ...

  7. javascript的全局变量

    javascipt是一门面向对象的编程语言.由于存在一些全局属性及全局函数,因此可以认为存在一个全局变量,这些全局属性及全局函数均是其属性或函数. 在js核心中,并没有定义一个具体的全局变量,因此,j ...

  8. js判断上传文件的类型和大小

    //检测文件大小和类型 function fileChange(target){ //检测上传文件的类型 if(!(/(?:jpg|gif|png|jpeg)$/i.test(target.value ...

  9. Hdu1108(最小公倍数)

    #include <stdio.h> int main() { int Num1,Num2; while(scanf("%d %d",&Num1,&Nu ...

  10. js与webview 常用交互代码

    常用js交互 css常用参数::: 是否允许用户选择元素的内容,选择值包括:     auto:用户可以选择元素内的内容     none:用户不能选择任何内容     text:用户只能选择元素内的 ...