Java:Android 在最终编译文件中排除具有依赖关系的包

Java:Android exclude packages with dependencies in final compiled file

我在 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时清空,其他选择都是不可达代码。我想排除其他客户 packages/classes 而不是在编译文件中选择的客户。但代码存在依赖

注意:对我来说是无效的注释代码,也不是反射。

你不应该按照你描述的方式去做。

您应该创建额外的抽象级别来访问特定于客户的 data/logic。并将特定于客户的 logic/data 移至单独的 libraries/projects。

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

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