gpt4 book ai didi

java - 屏幕密度相关产品风格的源代码的正确方法

转载 作者:搜寻专家 更新时间:2023-11-01 07:56:05 24 4
gpt4 key购买 nike

在 Android 中,有时应用的平板电脑版本与手机版本存在一定程度的差异,因此我需要为每个版本创建完全独立的 Activity 和其他组件。例如,我的平板电脑应用程序的主页 View 中可能包含与手机应用程序中的模块完全不同的模块。这些差异超出了布局文件中的配置限定符。

对于适用于 Android 的 gradle,我看到有两种方法可以支持每种产品风格的不同源代码。特别是在具有手机和平板电脑产品风格的示例中,选项 1 似乎使用了包名称:

 phone {
packageName
"com.ebookfrenzy.buildexample.app.phone"
versionName "1.0-phone"
}

选项二是使用源集来定义附加代码​​或全新的源目录:

sourceSets {
phone {
java {
srcDir 'src/phone/java'
}

}
}

哪个选项是正确的方法?我没有在 Google 的文档中找到任何内容,我担心如果我选择了错误的方法,我可能会错过 future Android Studio 版本中对“正确”方法的支持。

最佳答案

Which option is the correct method?

恕我直言,两者都不是。

选项 #1 不会“为每个版本创建完全独立的 Activity 和其他组件”。它会将您的代码打包到一个单独的 APK 中。另请注意 packageName替换为 applicationId在前段时间的产品 flavor 配置中。

选项 #2 可能有效,但没有必要,而且比其他选项更容易混淆 IDE。


首先,您需要问自己,“我自己,我真的需要两个单独的 APK 以及由此带来的所有麻烦,而不是让一个 APK 带有一些智能分支来选择正确的东西吗?”。

例如,假设您决定要拥有 PhoneActivityTabletActivity扮演同样的角色,但应该分别在小屏幕和大屏幕设备上使用。在这种情况下,将两者放在同一个应用程序中,并使用绑定(bind)到资源集的 boolean 资源(例如 res/values/bools.xmlres/values-sw720dp/bools.xml )来确定将根据屏幕尺寸启用其中一个。对于由第三方发起的 Activity (例如,MAIN/LAUNCHER Activity ),这可能就足够了。对于您自己开始的 Activity ,您需要几行 Java 代码来配置适当的 IntentstartActivity() 一起使用.

坚持使用一个 APK 文件将简化分发,包括使其在不支持单个产品具有多个 APK 概念的 channel 上实际上成为可能。


如果您确定确实需要两个 APK,那么产品口味就是正确的答案。但是,您可以将特定尺寸的代码放在 flavor-specific sourcesets 中。 ,无需配置即可“开箱即用”,而不是在您自己的源目录中破解。

所以,除了src/main/ , 你可能有 src/pocketSized/src/goshDarnedHuge/作为源集,绑定(bind)到 pocketSizedgoshDarnedHuge产品口味。风格独有的代码放在风​​格的源集中(例如,每个版本中的 MainActivity 实现),通用代码保留在 src/main/ 中。 .您的分发 channel (例如 Play 商店)可能有在同一市场列表下分发多个 APK 的额外规则(例如 <compatible-screens> 或告诉市场在什么情况下使用哪个 APK 的东西)。

关于java - 屏幕密度相关产品风格的源代码的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27449035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com