由于不同客户的不同需求,不同项目可能存在细微的差别,此时,如果代码可以在不同项目间复用,管理起来就非常方便。  虽然使用配置文件,可以在运行时区分不同项目的需求从而执行不同的功能,但是,这会使得代码本身臃肿,包含了多套逻辑。  在C/C++中,使用条件编译,就是非常通用的解决方案。 不同项目间完全共享同一份代码,只是在编译不同项目时,打开不同的Feature, 模块代码中,针对不同的Feature进行条件编译。但是,在Android上,基于Java开发,没有条件编译的支持, 我就不知道应该采用什么比较好的方式来支持多个项目间的共享代码。 虽然网上看到可以利用java的boolean型的if语句来模拟条件编译, 但那个很有局限性,只能在满足语法的前提下进行,如果,我连import不同的package也需要进行条件控制,那就不行了。各位TX,谁能支持一下~~~~~

解决方案 »

  1.   

    你是想在不同的project中使用同一段代码吗? 如果是 你可以把你要用的build 然后用maven加这个jar文件 就应该可以共享了
      

  2.   

    貌似只能做模块,通用性这个确实不好搞定。又不像c语言,java没有编译期运行期这么一说,而且如果只是java的模块间复用,那可以简单的写成java文件来互相使用,但是要是android的话,还要考虑兼容问题,andoird SDK一升级,还要去检测自己的模块是不是有兼容问题,比如联系人的查找,信息的查找,甚至连剪贴板的获取各个sdk间方法都是不同的。
    我个人觉得可能性不大。
      

  3.   

    我的需求是,比如一个application代码,同时给多个Project用,不想写多套代码。 但是,不同的Project,有细微的差别, 导致, Application中的部分代码需要形如:#if  Project_A
    ....................
    #elif Project_B
    ..................
    #elif Project_C但是,Java不支持条件编译~~~
      

  4.   

    用policy或者strategy模式吧
    ProjectInterface.
    ProjectCommon.
    ProjectA,ProjectB,ProjectC...
    再搞个ProjectFactory或Manager...通通搞定
    ifdef适合简单的情况,如果你的也比较简单,简单到90%都是common的,那用if加变量也是一样阿,对吧
      

  5.   

    LZ的,用ProjectFactory的话,其实各个Project的代码都还是编译进去了~~~
      

  6.   

    可以把宏变成全局的静态变量,多消耗一点空间
    if(Config.PROJECT == Project_A)
    {}else if  …………
      

  7.   

    这个问题的确有点难办啊,目前我们采用的办法就是设置一个全局变量,采用if……else if……的办法去做,没有预编译。不知道有没有更好的办法。
      

  8.   

    使用全局变量的方式不能解决所有问题~~比如,我想对于Import语句也进行条件编译, 此时,就会存在语法问题~~
      

  9.   

    别再说什么if了,也别再说什么全局变量,
    我要在1.6下不调用ScrollView.setScrollbarFadingEnabled(Boolean enable);而在1.6后的版本中才调用此函数,你们给我用拿if试试?!没有预编译,这种实现想都别想。
      

  10.   

    这确实是个大问题,一个项目的各种版本开发起来很不方便。以前做j2me时还可以用polish插件的预编译,现在android中却没有类似的插件,头疼啊。