Java 从Google Play services jar文件中剥离一些文件是否有问题?

Java 从Google Play services jar文件中剥离一些文件是否有问题?,java,android,jar,google-cloud-messaging,google-play-services,Java,Android,Jar,Google Cloud Messaging,Google Play Services,我们的应用程序使用Google Play services SDK进行GCM推送通知,但是jar文件中有com.Google.ads包。因此,我们的应用程序被一些移动安全应用程序标记为广告应用程序。我从google-play-services.jar中删除了com.google.ads包,GCM推送在剥离的jar中仍然可以正常工作 从Google Play services jar文件中剥离一些文件是否有问题?你以前见过同样的问题吗?不知怎的,我在网上找不到任何关于这个的相关信息。这应该不是问题

我们的应用程序使用Google Play services SDK进行GCM推送通知,但是jar文件中有com.Google.ads包。因此,我们的应用程序被一些移动安全应用程序标记为广告应用程序。我从google-play-services.jar中删除了com.google.ads包,GCM推送在剥离的jar中仍然可以正常工作


从Google Play services jar文件中剥离一些文件是否有问题?你以前见过同样的问题吗?不知怎的,我在网上找不到任何关于这个的相关信息。

这应该不是问题,因为没有人尝试加载这些类

认为java中的类是按需加载的,如您所见:

Java类加载器是Java运行时环境的一部分 将Java类动态加载到Java虚拟机中。 通常,类只在需要时加载。Java运行时系统 不需要了解文件和文件系统,因为 类装入器

因此,jar中现有的或假定存在的类不会以任何方式进行解析,不管它在什么地方,应用程序只需要调用一堆资源。实际上,jar只是一个提供类的库,这些类在你的应用程序和设备中安装的其他东西之间起着桥梁的作用,但是你只加载你需要的类

此外,只要内容没有“密封”,就不会检查内部文件的一致性。正如你所看到的

包密封:可以选择密封存储在JAR文件中的包 因此,包可以强制实现版本一致性。封包 在JAR文件中,意味着该包中定义的所有类都必须 可以在同一JAR文件中找到

一个包是可以密封的,但是如果你已经打破了罐子,在一个设备上试过了,并且成功了,那就意味着它没有被密封


因此,只要您实际需要的类存在,并且它们的版本是正确的,就不应该再发生任何事情。

也许,但请记住,在实现级别,Android不使用JVM,而是将java字节码视为中间编译阶段,并进一步将其转换为不同类型机器的指令。它或多或少与源代码兼容,但VM行为的模糊角落可能相同,也可能不同。@ChrisStratton确实如此。事实上,我首先想到的是DVM,或者谷歌play服务本身,可以尝试检查任何进一步的细节。但是如果它在一个设备中工作,我们可以说“标准”或已知清单中的所有点都通过了,并且我们可以推断没有其他特定的点。可以肯定的是,这是没有文档记录的东西,所以我不会说我100%肯定这一点,但我不会担心。Proguard应该剥离所有未使用的类…谢谢,我们确实使用了Proguard。