尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

在 Android Studio 中运行 Fresco 示例应用:从导入工程到配置 NDK 的完整指南

在 Android Studio 中运行 Fresco 示例应用:从导入工程到配置 NDK 的完整指南 移动开发图像处理【免费下载链接】frescoAn Android library for managing images and the memory they use.项目地址https://gitcode.com/gh_mirrors/fr/fresco点击查看免费下载Fresco 是一个用于管理图片及其内存占用的 Android 图片加载库本仓库gh_mirrors/fr/fresco包含完整的库源码与一整套示例应用Sample Apps。本文是一份面向开发者的实操指南围绕 samples/README.md 展开从在 Android Studio 中导入工程、正确配置 NDK 路径到运行 Showcase 示例应用并通过侧边抽屉浏览各类功能 Demo同时结合仓库中的 Gradle 配置与源码说明背后的原理帮助你快速跑通示例环境。一、用 Android Studio 打开 Fresco 工程Fresco 的示例应用与库源码位于同一个多模块 Gradle 工程中。打开方式很简单在 Android Studio 中选择File Open...然后选中仓库根目录下的fresco文件夹即本仓库目录Android Studio 会依据 settings.gradle 识别出全部 Gradle 子模块并开始同步。整个工程由库模块与示例模块共同组成其中示例模块均定义在samples/目录下从 settings.gradle 可以看到以下 7 个示例应用模块路径模块名用途samples:animation2Animation2实验性的新动画实现示例对应 animated-drawable 模块samples:comparisonComparison与 Fresco 加载方式对比的示例samples:gesturesGestures手势相关组件示例samples:scrollperfScrollPerf滚动列表性能测试示例samples:showcaseShowcase功能最全的 Demo 聚合应用推荐从这里开始samples:zoomableZoomable可缩放图片组件库示例samples:zoomableappZoomableApp基于 Zoomable 的独立示例应用注意这是一个包含大量库模块与原生代码的完整工程首次 Gradle 同步会下载依赖与原生库源码耗时较长属正常现象。同步完成后samples/下每个模块都对应一个可独立安装运行的 App。二、配置 NDK 路径构建前必做为什么需要 NDKFresco 的若干关键功能依赖原生代码Native Code例如动图解码GIF/WebP、静态 WebP 解码、native-filters滤镜、native-imagetranscoder图片转码、imagepipeline-native内存管理等。以模块的 JNI 目录为例animated-gif、static-webp、native-filters 下都包含*.mk、*.cpp、*.h文件构建时必须通过 NDK 工具链将它们编译成.so库。因此构建 Fresco 之前必须先为工程指定 NDK 路径。方式一通过 Android Studio 对话框配置官方推荐按原文档说明在 Android Studio 中执行File Project Structure在弹出的对话框左侧选择 SDK Location在右侧的Android NDK location一栏填入本机 NDK 的安装目录点击 OK 后Android Studio 会把该路径写入工程的local.properties文件该文件位于仓库根目录由 IDE 生成不要提交到版本控制。方式二直接编辑 local.properties也可以手动在仓库根目录创建/编辑local.properties写入类似下面的内容sdk.dir/path/to/android-sdk ndk.dir/path/to/android-ndk关于该文件的读取逻辑可以参考根目录 build.gradle 中的getNdkBuildFullPath函数它依次尝试读取local.properties中的ndk.command直接指定 ndk-build 命令、ndk.path、ndk.dir属性命中后拼接出ndk-build的完整路径。方式三环境变量与自动发现从 build.gradle 的源码可以看出构建脚本查找 NDK 的优先级如下首先尝试常见安装位置macOS 的/opt/android_sdk/ndk/、Linux 的/usr/local/lib/android/sdk/ndk/结合工程统一使用的 NDK 版本号拼接路径其次读取环境变量ANDROID_NDK_HOMECI 场景常用见 build.gradleCI 上会直接把该环境变量赋给每个模块的ndkPath再回退到local.properties中的ndk.command/ndk.path/ndk.dir以上都不存在时则假定ndk-build已加入系统PATH。工程要求的 NDK 版本工程统一通过ndkVersion约束 NDK 版本。在 buildSrc/src/main/java/com/facebook/fresco/buildsrc/GradleDeps.kt 中定义object Native { const val version 27.1.12297006 }例如 samples/showcase/build.gradle 中ndkVersion GradleDeps.Native.version引用的就是该版本号。建议通过 Android Studio 的 SDK Manager 安装与之一致的 NDK 版本避免版本不匹配导致的编译错误。另外仓库根目录 build.gradle 中还记录了构建 Fresco 原生部分会用到的第三方库版本可在 gradle.properties 中确认libjpeg-turbo 2.1.5.1、libpng 1.6.37、giflib 5.2.1、libwebp 1.3.2。构建脚本会在需要时自动下载并解压这些库到各模块的nativedeps目录见 build.gradle 的createNativeLibrariesTasks逻辑无需手工准备。三、运行第一个示例应用Showcase原文档明确建议Showcase 应用是体验 Fresco 功能的最佳起点。它聚合了绝大多数库功能一个 App 即可覆盖全部 Demo。在 Android Studio 中运行在 Android Studio 的 Run/Debug Configurations 中选择Showcase模块全名为samples:showcaseApplication ID 为com.facebook.fresco.samples.showcase见 samples/showcase/build.gradle选择一台模拟器或真机点击 Run 即可编译安装并启动。Showcase 的构建配置有几点值得了解samples/showcase/build.gradle多维度 Product Flavors定义了normal、fast、internal三个 flavorbuild.gradle。其中fast将minSdkVersion降低到 Fresco 库本身支持的最低版本便于在低版本设备上快速验证默认构建normal。ABI Split按x86、x86_64、arm64-v8a、armeabi-v7a四种 ABI 拆分 APKbuild.gradle模拟器x86/x86_64与真机arm64-v8a/armeabi-v7a都能得到对应的原生库。依赖聚合该模块几乎依赖了仓库所有核心库包括animated-gif、animated-gif-lite、animated-webp、static-webp、native-filters、native-imagetranscoder、drawee-backends:drawee-pipeline、imagepipeline-backends:imagepipeline-okhttp3以及实验性的 Fresco Vito 系列模块:vito:*和调试工具:tools:flipper-fresco-plugin、:tools:stetho见 samples/showcase/build.gradle。这使它成为观察 Fresco 全貌的理想入口。Showcase 应用启动时做了什么Showcase 的Application类实现位于 samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/ShowcaseApplication.kt启动流程展示了 Fresco 在生产环境中的标准初始化方式可作为集成参考通过OkHttpImagePipelineConfigFactory构建ImagePipelineConfig注册RequestListenerRequestLoggingListener等、设置渐进式 JPEG 配置SimpleProgressiveJpegConfig并注册自定义解码器与 Drawable 工厂CustomImageFormatConfigurator开启若干实验性选项如setBinaryXmlEnabled(true)、setBitmapPrepareToDraw(...)、setDownsampleIfLargeBitmap(true)调用Fresco.initialize(this, imagePipelineConfig, draweeConfigBuilder.build())完成初始化随后初始化实验性的 Fresco VitoFrescoVito.initialize(...)、集成 Stetho 与 Flipper 调试插件。四、用侧边抽屉浏览 Showcase 中的 Demo启动 Showcase 后主界面是一个带侧边抽屉Navigation Drawer的 Activity对应 MainActivity.kt。抽屉中的条目并非硬编码而是由 ExampleDatabase.kt 声明、在MainActivity.onCreate中动态加入菜单见 MainActivity.kt。每个条目点击后会替换content_main容器中的 Fragment并把选中的条目 ID 持久化到SharedPreferences下次启动自动恢复上次浏览的位置。抽屉按分类组织 Demo主要包括Image Pipeline图片管线Downsample Modes降采样模式、Notifications通知栏图片、Post-Processor后处理器、Prefetch预取、Resizing缩放、Qualified Resource URI、Partial Image Loading部分图片加载、Platform Bitmap Factory、Region Decoding区域解码Image Formats图片格式Progressive JPEG渐进式 JPEG、GIF、WebP、Data URI、XML以及仓库中额外的 Color、Keyframes、SVG 等格式示例对应 imageformat 目录下的各 FragmentFresco Vito实验性 Vito 组件的系列示例包括 Vito Litho 简单示例、Region Decoding、Listener、Slideshow、NinePatch、Text Span、Multi URI、Rounded Corners、Image Transition 等Vito RendererRenderer 的 Shapes、Color Filters、Fading 与 Layers 缩放示例。每个 Demo 都对应ExampleDatabase中一个ExampleItem其createFragment()返回对应的示例 Fragment例如ImagePipelinePrefetchFragment、ImageFormatWebpFragment等。你可以从抽屉中任选一项进入对照 docs 目录下的文档如 webp-support.md、resizing.md、rounded-corners-and-circles.md边看效果边理解 API 用法。五、其他示例应用简介除 Showcase 外其余示例各有侧重可按需运行Animation2samples:animation2针对实验性新动画实现animated-drawable 模块的专用示例。其模块内 README 明确说明这是Experimental Animations实验性动画示例Comparisonsamples:comparison对比不同加载/解码方式效果的示例Gesturessamples:gestures演示手势交互的示例ScrollPerfsamples:scrollperf滚动场景下的性能测试应用自带 ProGuard 配置 proguard-scrollperf.proZoomable / ZoomableApp演示可缩放图片组件samples:zoomable为组件库samples:zoomableapp为使用该组件的独立 App。六、常见问题与排错Gradle 同步报 NDK 相关错误优先确认local.properties中ndk.dir是否正确、所装 NDK 版本是否为27.1.12297006或在File Project Structure中重新指定 NDK location。下载原生依赖缓慢首次构建时构建脚本会从网络下载 libjpeg-turbo、libpng、giflib、libwebp 等源码build.gradle请保持网络畅通这些文件会被缓存到各模块nativedeps/downloads目录重复构建无需重复下载。多模块编译内存不足仓库根目录 gradle.properties 已设置org.gradle.jvmargs-Xmx2048m如工程较大仍出现 OOM可按需调大该值。运行 Showcase 时选择 flavor默认normal即可若需在低版本设备验证可在 Build Variants 面板切换为fast。想了解具体功能实现Showcase 中每个 Demo 的 Fragment 源码都位于 samples/showcase/src/main/java/com/facebook/fresco/samples/showcase 下例如预取示例见 ImagePipelinePrefetchFragment.javaWebP 示例见 ImageFormatWebpFragment.java可直接对照学习。总结运行 Fresco 示例应用只需要三步用 Android Studio 打开仓库根目录fresco文件夹 → 在Project Structure中配置 NDK location写入local.properties→ 选择samples:showcase模块运行。Showcase 通过侧边抽屉把图片管线、图片格式、Fresco Vito、Renderer 等数十个功能 Demo 集中呈现是快速上手和理解 Fresco 能力边界的最佳入口其余 6 个示例应用则分别聚焦动画、对比、手势、滚动性能与缩放等特定场景可按需深入。赞分享移动开发图像处理【免费下载链接】frescoAn Android library for managing images and the memory they use.项目地址https://gitcode.com/gh_mirrors/fr/fresco点击查看免费下载相关推荐Syn源码解析从syn.erl看进程注册的核心实现Syn源码解析从syn.erl看进程注册的核心实现 Syn作为Erlang和Elixir生态中强大的分布式进程注册和进程组管理工具其核心功能实现集中在 srLadybird Android 移植的 Android Studio 工程配置指南从打开仓库到 NDK 排错Ladybird Android 移植的 Android Studio 工程配置指南从打开仓库到 NDK 排错 本文基于 Ladybird 浏览器官方文档 A前端WebAssembly在 Solid 应用中接入 TanStack Form Devtools示例工程解析与运行指南在 Solid 应用中接入 TanStack Form Devtools示例工程解析与运行指南 本指南围绕仓库中的 Solid Vite 示例工程 exa前端UI组件上一篇宝可梦Roguelike离线畅玩终极方案Pokerogue-App完整指南下一篇终极Tiler指南如何用图片构建惊艳的像素艺术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表