我目前正在将一个非常旧的 Android 应用程序从 Eclipse 迁移到 Android Studio。
在我的应用程序的旧版本中,我能够使用 Ant 脚本创建一些“ flavor ”。该脚本的目的是使用不同的包名称和不同的资源(可绘制等)复制 Eclipse 项目
我已经将项目迁移到 Android Studio,删除了 Ant 脚本并创建了一些 flavor。
但是现在,我有一些问题需要反序列化 - 在新版本的应用程序中 - 一个在旧版本应用程序中序列化的对象。
这里是堆栈跟踪的一部分:Caused by: java.lang.ClassNotFoundException: com.company.app.flavor.bo.Player
在旧版本中,每个口味都有自己的包名:
com.company.app
com.company.app.flavor
在这个新版本中,代码结构是 com.company.app.flavor
,我使用 Gradle 来为 flavor 生成良好的 applicationId
。
所以,flavor 的 applicationId
是正确的,但是类的包名称似乎尊重项目结构,所以我无法使用包 com.company 反序列化原始对象.app.flavor.bo.Player
放入对象 com.company.app.bo.Player
。
如果我用 com.company.app.flavor
更改项目的结构,它将适用于 flavor 但不适用于带有 applicationId
的原始项目>com.company.app
.
那么,有没有一种方法可以使用 Gradle 或其他工具(proguard?)来更改 applicationId
和 flavor 的包名称?
预先感谢您的帮助。
最佳答案
是的,您可以在 gradle 中使用 ProductFlavor,这应该会更改应用程序的包名称。如果您没有对类路径进行硬编码,那么序列化也应该可以正常工作。
android {
.
.
.
defaultConfig {
applicationId "lib4.com.stackoverflow"
}
productFlavors {
staging {
applicationIdSuffix ".staging"
}
preProduction {
applicationIdSuffix ".preProduction"
}
}
}
创建 apk 后,您可以通过在 android studio 上拖放 apk 并打开 Android Manifest 来验证包名称是否已更改。您将在 apk 的 list 中看到更新的包名称。但是在源代码中,您仍然会看到您之前提供的包。
关于java - 如何使用 Gradle 更改 Android 风格应用程序的包名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773416/