You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:能否通过资源限定符拆分src文件夹?

Android Flavor结合横竖屏限定符拆分源码目录的解决方案

方案可行性结论

完全可行,Android官方支持在**Product Flavor维度结合配置限定符(如横竖屏)**来组织源码与资源目录,编译时会根据当前设备的配置自动匹配对应的代码。

具体实现步骤

针对你的flavor2场景,可按以下方式配置:

  1. 创建带限定符的Flavor源码目录
    为flavor2分别创建横竖屏专属的源码目录,目录命名遵循flavorName-限定符规则:

    • src/flavor2-land/java/:存放横屏版AE生成的Java类(对应WIDTH=1920的版本)
    • src/flavor2-port/java/:存放竖屏版AE生成的Java类(对应WIDTH=1080的版本)

    关键要求:两个目录下的Java类必须保持完全相同的包名和类名,这样编译时才会根据设备横竖屏状态自动替换加载。

  2. 确认Gradle配置(无需额外修改)
    只要你的Product Flavor基础配置正确,Android Gradle插件会自动识别带限定符的Flavor目录,示例基础配置:

    android {
        flavorDimensions "version"
        productFlavors {
            flavor1 {
                dimension "version"
            }
            flavor2 {
                dimension "version"
            }
        }
    }
    
  3. 验证效果
    构建flavor2的变体(如flavor2Debug)后,旋转设备:

    • 横屏时,App会加载flavor2-land下的Java类,使用WIDTH=1920
    • 竖屏时,自动切换为flavor2-port下的类,使用WIDTH=1080

替代方案(无需拆分源码)

如果觉得拆分目录过于繁琐,可将固定尺寸参数迁移到资源文件中,避免生成多版本Java类:

  1. 在res/values/和res/values-land/下分别创建尺寸资源:
    <!-- res/values/dimens.xml(竖屏) -->
    <integer name="ae_scene_width">1080</integer>
    <integer name="ae_scene_height">50</integer>
    
    <!-- res/values-land/dimens.xml(横屏) -->
    <integer name="ae_scene_width">1920</integer>
    <integer name="ae_scene_height">50</integer>
    
  2. 修改AE生成的Java类,通过资源获取尺寸(若无法修改工具生成的代码,此方案不适用):
    // 替换原有常量定义
    public int getWidth(Context context) {
        return context.getResources().getInteger(R.integer.ae_scene_width);
    }
    public int getHeight(Context context) {
        return context.getResources().getInteger(R.integer.ae_scene_height);
    }
    

内容的提问来源于stack exchange,提问作者Jason John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:30:50