Java:Android在最终编译文件中排除包含依赖项的包

时间:2015-02-04 11:07:27

标签: java android eclipse conditional-compilation

我在Android / Eclipse中遇到此问题。

我在Android项目中工作,必须以不同的方式为不同的客户配置这个配置,这些配置在它们之间并不相似(非常不同的方法)。

代码以90%的比例共享,但每个客户都有自己的要求。

每个客户都有一个包含不同类和多个类的包。

我想在最终编译文件中只包含选择的客户包。

但我在共享代码中创建了条件对象,我必须加入所有包进行编译。

这或多或少是(示例)

//import every  customer packages
import com.project.customer_1
import com.project.customer_2
import com.project.customer_3
…..
import com.project.customer_98
import com.project.customer_99
……..
final static int customer=2; //Define the customer for this compilation
………

if (customer==1) { //unreachable code
customerClass1 customer1=new customerClass1();
customer1.method1_1;
customer1.method1_2;
customer1.method1_3;
}

else if (customer==2) {
customerClass2 customer2=new customerClass2();
customer2.method2_1;
customer2.method2_2;
customer2.method2_3;
}
…….//unreachable code
else if (customer==98) {//unreachable code
customerClass98 customer98=new customerClass98();
customer98.method98_1;
customer98.method98_2;
customer98.method98_3;
}
else if (customer==99{//unreachable code
customerClass99 customer99=new customerClass99();
customer99.method99_1;
customer99.method99_2;
customer99.method99_3;
}
............

当customer = X时清楚,其他选择是无法访问的代码。我想排除其他客户包/类,而不是在编译文件中选择客户。但是在代码中存在依赖性

注意:对我来说,无效的评论代码,也不是反映。

1 个答案:

答案 0 :(得分:1)

你不应该以你所描述的方式去做。

您应该创建额外的抽象级别来访问特定于客户的数据/逻辑。并将客户特定的逻辑/数据移动到单独的库/项目中。

要处理单独的客户项目,您的抽象级别应使用动态类加载。

修改即可。如果您无法重构项目,可以为每个客户创建Proguard配置文件,以删除无法访问的代码。