我目前正在将一个非常古老的Android应用程序从Eclipse迁移到Android Studio。
在我的应用程序的旧版本中,我能够使用Ant脚本创建一些“风格”。这个脚本的目的是使用不同的包名和不同的资源(drawable等)来复制Eclipse项目。
我已将项目迁移到Android Studio,删除了Ant脚本并创建了一些风格。
但是现在,我有一些问题要反序列化 - 在新版本的应用程序中 - 在旧版本的应用程序中序列化的对象。
这是stackstrace的一部分:Caused by: java.lang.ClassNotFoundException: com.company.app.flavor.bo.Player
在旧版本中,每种口味都有自己的包名:
com.company.app
com.company.app.flavor
在这个新版本中,代码结构为com.company.app.flavor
,我与Gradle一起玩,以便为风格生成好applicationId
。
所以,味道的applicationId
是正确的,但是类的包名似乎尊重项目结构,所以我不能将包com.company.app.flavor.bo.Player
的原始对象反序列化到对象{ {1}}。
如果我使用com.company.app.bo.Player
更改项目的结构,它将适用于风格但不适用于com.company.app.flavor
applicationId
的原始项目。
那么,有没有办法,使用Gradle或其他工具(proguard?)来更改com.company.app
和包装名称的味道?
提前感谢您的帮助。
答案 0 :(得分:3)
是的,你可以在gradle中使用ProductFlavor,这应该会改变应用程序的包名。如果你没有对类路径进行硬编码,那么序列化也应该没有任何问题。
android {
.
.
.
defaultConfig {
applicationId "lib4.com.stackoverflow"
}
productFlavors {
staging {
applicationIdSuffix ".staging"
}
preProduction {
applicationIdSuffix ".preProduction"
}
}
}
创建apk后,您可以通过在Android工作室上拖放apk并打开Android Manifest来验证包名是否已更改。您将在apk中的清单中看到更新的包名称。但是在源代码中,您仍会看到之前提供的包。