Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Filter
Develop Smart Signage
docweb app html5 flash storage optimization guide terminology here, "flash" means the device's flash memory storage where the app is installed and stored it has nothing to do with adobe flash nature of this document this is a best-practice guide it is not intended to mandate compliance or to trigger any action based on compliance — use it as a reference for better app quality and user experience contents why storage size optimization matters what takes up space minimize bundle code size with build options image & graphics asset optimization fonts & other assets what not to bundle managing storage that accumulates after install 1 why storage size optimization matters a tv's flash storage is limited and shared by the system and many apps a large app package causes the following problems installs/updates are slower and more likely to fail the larger the size, the longer the download/write, and installs/updates can fail when storage is tight it pressures storage when one app takes a lot of space, there's less room for other apps to install and less system cache space, degrading the whole device's usability it leads to loading cost larger code/assets increase parse/decode load, lengthening startup and affecting ram usage too the problem doesn't end at install time the cache/stored data the app creates while running occupies the same flash even if you make the package small, occupied space keeps growing if you don't manage this conversely, keeping the app small makes installs/updates fast, reduces download traffic, frees storage, and improves startup performance core principle ① don't ship what you don't need · ② ship what you do need in its smallest form · ③ manage what accumulates after install · ④ automate this in your build pipeline if you rely on doing it by hand every time, something will always slip through this document is a companion to the memory optimization guide, which covers ram runtime memory making assets smaller reduces not only storage but also the runtime memory spent on decoding/parsing 2 what takes up space first, understand what dominates your app package's size usually the order of magnitude is as follows asset description main way to reduce images backgrounds, posters, icons, sprites resize · lightweight formats · compression section 4 javascript/css bundle app code + libraries minify · tree-shaking · dependency diet section 3 fonts web fonts especially cjk subset · woff2 section 5 local media intro videos, sound effects, etc minimize · compress · switch to streaming section 5 other data json and static files bundled in minimize · move to runtime fetch section 5 files that tag along source maps, tests/mocks, original images, unused assets exclude from packaging section 6 measure first use a bundle analyzer to see with your own eyes which modules/assets take up space before you touch anything bundle analysis webpack-bundle-analyzer, rollup-plugin-visualizer, source-map-explorer file assets sort your build output dist directory by file size and review the biggest first final package record the package size for each release to keep a trend this value directly determines the space it takes on the device often a handful of large items account for most of the size before polishing many small ones, it's more efficient to handle the largest assets first 3 minimize bundle code size with build options the javascript/css you load takes storage by itself most popular bundlers/frameworks provide size optimization by default in their production build, so simply turning the options on correctly yields a big win option names and defaults change between tool versions the config examples below are meant to convey the gist when applying them for real, check the current version's options in the official docs linked at the end of each subsection 3 1 common principles regardless of framework always ship a production build development builds include warnings, debug code, and source maps, which are large minify js with terser/esbuild, css with cssnano/esbuild — strip whitespace/comments and shorten identifiers tree-shaking remove unused code works well only with es modules import/export choose libraries that support tree-shaking esm, sideeffects false remove unused css use purgecss, or the purge/content settings of frameworks like tailwind, to drop classes you don't use exclude source maps from the package source map files are very large don't include them in the shipped package; store them separately if needed dependency diet don't pull in a heavy library whole for one or two features; use only the parts you need, or consider a lighter alternative or your own implementation also remove duplicate dependencies that do the same thing don't let multiple versions of the same library get bundled together as the dependency tree deepens, it's common for two or three different versions of the same library to be included check for duplicate versions with npm ls <package>, and unify versions dedupe, overrides/resolutions so only one copy remains verify with a bundle analyzer don't inline images as base64 base64 is about 33% larger than the raw bytes, and when mixed into a js/css bundle it also lives in runtime memory as a string set the bundler's inline threshold small or 0 and keep images as separate files webpack rule parser dataurlcondition maxsize, vite build assetsinlinelimit avoid excessive transpilation/polyfills lowering syntax the target platform already supports down-leveling needlessly grows the code set your build target to the target environment set a size budget and enforce it in the build define a baseline for total output size so the build warns/fails when exceeded — this structurally blocks size regressions size-limit, bundlesize; angular has built-in budgets — see 3 6 know precisely — the scope of code splitting splitting code per screen with dynamic import benefits initial load time and runtime memory, but does not reduce the total amount of code bundled into the package what reduces storage total size is tree-shaking, minify, removing dependencies, and removing unused css apply the two separately 3 2 webpack mode 'production' auto-enables terser minification, tree-shaking, scope hoisting optimization usedexports, optimization minimize true css css-minimizer-webpack-plugin analysis webpack-bundle-analyzer // webpack config js essentials module exports = { mode 'production', // apply production optimizations at once devtool false, // keep source maps out of the package optimization { usedexports true, // tree-shaking minimize true, // terser minification splitchunks { chunks 'all' }, // split common modules dedupe }, module { rules [ { test /\ png|jpe?g|webp|svg $/i, type 'asset/resource', // output as separate files, no base64 inlining }, ], }, }; official docs production · tree shaking 3 3 vite / rollup a vite production build vite build performs minify + tree-shaking by default build sourcemap false to exclude source maps build minify esbuild by default, or terser , build rollupoptions output manualchunks to shape chunks analysis rollup-plugin-visualizer // vite config js essentials export default { build { minify 'esbuild', // fast, strong minification sourcemap false, // exclude source maps from the package cssminify true, assetsinlinelimit 0, // disable base64 image inlining rollupoptions { output { manualchunks { vendor ['large-shared-library'] } }, }, }, }; official docs vite — building for production · rollup — configuration options 3 4 react always ship a production build node_env=production — development builds include warnings and validation code and are large keep dev-only tools tests, mocks, debug panels out of the production bundle if the runtime weight is a burden, consider an interface-compatible lightweight alternative e g , the preact family use react lazy + suspense for per-screen splitting benefits initial load/memory — see the note in 3 1 for the total-size perspective official docs build a react app from scratch 3 5 vue the production build removes development warnings and hints sfcs vue and <script setup> reduce unnecessary code at compile time reduce unused global component/plugin registrations, and import in a tree-shakable form official docs production deployment 3 6 angular build with the production configuration aot compilation and the build optimizer are enabled by default set bundle budgets so the build warns/fails when size exceeds a threshold, preventing size regressions // angular json essentials — cap bundle size "budgets" [ { "type" "initial", "maximumwarning" "500kb", "maximumerror" "1mb" } ] official docs building angular apps includes size budget configuration 4 image & graphics asset optimization images usually account for the largest share of an app package the key is to not create images you don't need, keep only one copy of what you do need, size it to the minimum needed for display, use the most efficient format, and compress it as much as possible the impact shrinks toward the bottom, so apply these from the top down 4 1 first, check whether it needs to be an image at all the smallest image is no image the following need no file at all if drawn with css or code solid/gradient backgrounds → background-color, linear-gradient rounded corners/borders/shadows → border-radius, border, box-shadow dividers/dotted lines → border, outline repeating patterns → repeating-linear-gradient simple shapes circles, triangles, badge backgrounds, ribbons → css or inline svg gauges/progress bars/simple charts → draw with css or canvas /* css instead of an image gradient background + rounded corners + shadow */ poster-overlay { background linear-gradient to top, rgba 0, 0, 0, 8 , transparent ; border-radius 8px; box-shadow 0 4px 12px rgba 0, 0, 0, 4 ; } it's common to turn a design mockup into a file just because it arrived as an image go through your asset list and ask "can this be done with css?" for each one not only does size drop, but color/size changes become easier too 4 2 keep one copy of an asset and handle variants with code keeping color/direction/state variants of the same graphic as separate files multiplies the asset count handle variants with css color variants → keep svg with fill="currentcolor" and control via css color for raster icons, use mask-image + background-color, or filter direction variants → don't keep left/right arrows as two files; use transform scalex -1 , and rotate 180deg for up/down rtl layout support works the same way state variants normal / focus / selected → instead of a per-state image set, change only color/size/opacity with css size variants → a single svg covers all sizes /* handle color/direction variants with one icon copy */ icon { color #999; } /* svg uses fill="currentcolor" */ icon focus, icon is-selected { color #fff; } icon--flip { transform scalex -1 ; } /* reuse the left arrow as a right arrow */ turning 24 icons into files across 3 colors × 2 directions yields 144 files reusing the same asset keeps it at 24 4 3 resize to display size don't bundle a 4k original for an image shown at 200×300 bundling a file pre-resized to the display size greatly reduces size if you need different assets per resolution fhd/4k , prepare only the sizes you actually use 4 4 prefer lightweight formats photos / complex images → webp recommended smaller than jpeg/png at equal quality it's widely supported by tv web engines, making it the safest choice even smaller alternative → avif higher compression, but it may not be supported depending on the web engine version always verify support on your target platform's chromium version, and use webp if you're unsure logos / icons / simple shapes → svg being vector, they're small and crisp regardless of resolution bundle multiple icons as an svg sprite animation → avoid gif animated gifs are large and use a lot of decode memory use css animations for simple ui motion loading spinners, emphasis effects , and animated webp when raster animation is truly required if you don't need transparency, use a format without an alpha channel jpeg/lossy webp 4 5 squeeze further with lossless/lossy compression tools even after choosing a format, re-compressing with a dedicated tool can reduce size further with no or minimal quality loss png lossless zopflipng powerful but slow , oxipng/optipng if the color count is low, pngquant palette-based lossy saves a lot jpeg mozjpeg cjpeg , jpegtran lossless re-compression webp cwebp lossy via -q, lossless via -lossless svg svgo remove metadata, redundant decimals, comments general strip unnecessary metadata such as exif # lossless png optimization zopflipng zopflipng -m in png out png # for pngs with few colors, palette lossy compression is far more effective pngquant --quality=65-85 --output out png in png # jpeg → webp photos lossy, quality 75-85 recommended cwebp -q 80 photo jpg -o photo webp # logo / transparent png → lossless webp cwebp -lossless logo png -o logo webp # svg optimization svgo icon svg -o icon min svg lossy vs lossless for photos, lossy compression webp/jpeg around quality 75-85 gives the best quality-per-byte use lossless or a palette pngquant for logos, transparent images, and ui elements that must stay crisp always check quality by eye after compression and adjust the quality value 4 6 automate it in the build pipeline image optimization is easy to forget if done by hand each time handle it automatically at build time general purpose the imagemin family of plugins imagemin-webp, imagemin-pngquant, imagemin-zopfli, imagemin-mozjpeg, imagemin-svgo node pipeline sharp fast resize + format conversion bundler plugins vite/webpack image-optimization plugins that convert/compress automatically at build time // example automate resize + webp conversion with sharp build script import sharp from 'sharp'; await sharp 'poster_original jpg' resize 400, 600 // resize to display size webp { quality 80 } // lightweight format + lossy compression tofile 'poster_400x600 webp' ; keep the originals separately optimization resize/lossy compression is irreversible, so keep the source originals in your repository/asset store and bundle the optimized versions only into the build output 5 fonts & other assets 5 1 fonts bundle only the weights/styles you truly need limit to regular/bold and exclude unused light, thin, italic use subset fonts that contain only the characters you actually use this is especially effective for cjk chinese/japanese/korean , where a full-glyph font can reach several mb use woff2 — the best-compressed font format if the platform's built-in fonts are enough, not bundling a web font at all is the surest saving 5 2 local media minimize the count and length of media intro videos, sound effects bundled into the package, and compress with an appropriate codec/bitrate where possible, don't bundle it locally — stream/download it at runtime to keep it out of the package size but you must also have a cleanup policy so fetched files don't keep piling up on the device section 7 5 3 other data minimize large json/static data bundled in, and if it isn't needed on the first screen, move it out of the package via a runtime fetch here too, cap the response cache so it doesn't grow without bound section 7 6 what not to bundle what you didn't ship needs no optimization no matter how much you shrink things with compression/resizing, nothing is a surer saving than leaving out features and files you don't need in the first place 6 1 re-examine the features and assets themselves the question that should come before technical optimization is "is this really needed?" as releases pile up, unused things accumulate low-usage features — if you have usage metrics, check them and remove or defer to the next release screens/features that are barely used dropping one feature often has more impact than compressing dozens of assets large decorative assets — intro videos, splash animations, full-screen background illustrations if it's a flourish users skip every time, it's not worth paying for in size frame-image animations — especially expensive first consider whether a css animation can give the same impression 4 1 experiment/event leftovers — a/b test variants, seasonal event assets, and pilot features are often left behind after they end this judgment is hard for a developer to make alone it's more effective to have a step that reviews "what can be dropped this time" together with planning/design before release 6 2 things that commonly tag along files that got in by accident often take more space than the assets you added on purpose removing such files has no effect on app behavior, so it's the lowest-risk, surest saving development source tree node_modules/, git/, build caches, dev config files source maps map files and the //# sourcemappingurl comments that point to them test/dev tools test files and snapshots, storybook, mock apis/sample data, debug panels design originals psd/ai/sketch files, un-optimized high-resolution original images — keep originals in the repository and bundle only the optimized versions documents readme, changelogs, bundles of dependency license text in the minimum form required if you have a notice obligation unused assets images, icons, fonts, and json no longer referenced after a ui refresh or plan change duplicate assets the same image included several times under different names comparing file hashes finds these easily unused locales translation files/region-specific assets for unsupported languages if you support many languages, consider loading only the selected language at runtime 6 3 use an "include list," not an "exclude list" listing what to exclude misses things every time a new file appears structure it as explicitly specifying only what to bundle configure the build so the output directory dist contains only the files needed to run, and package that directory as-is add a step just before packaging that prints the file list and sizes for a visual check unexpected files are usually caught at this step # show the 20 largest files in the output pre-release check find dist -type f -printf '%s\t%p\n' | sort -rn | head -20 # find duplicate files same content hash find dist -type f -exec md5sum {} + | sort | uniq -w32 -d put this check into your release script, and record the total output size alongside it — combined with the size budget from 3 1, it prevents size regressions 7 managing storage that accumulates after install storage isn't fixed at install time the cache/data the app creates as it runs occupies the same flash, and without a cap it keeps growing it's not rare for an app with a small install size to occupy several times that a few months later 7 1 what accumulates store what accumulates management point cache api / service worker image/js/api-response caches version the cache name; delete old-version caches indexeddb content lists, thumbnails, watch history cap item count/total; clean up old items localstorage settings, tokens, small state values don't put large data/images in it http cache network responses control lifetime via cache headers app data area downloaded media/thumbnails cap total downloads; provide a user delete option 7 2 how to do it set caps set limits on both count and total — e g , "thumbnail cache max 200 items / 20mb" — and when exceeded, evict the least recently used first lru set lifetimes give re-fetchable data content metadata, etc a ttl and delete it on expiry data kept "just in case it's needed" is the main cause of accumulation delete old-version caches on app update put a version in the cache name and remove the previous cache once the new version activates skip this cleanup and one copy of the cache piles up with every update check usage yourself read current usage with navigator storage estimate and clean up on your own when a threshold is crossed check support on your target web engine give users a way to delete offering "clear cache" in the settings screen lets users short on storage resolve it without uninstalling the app // remove old-version caches on app update service worker const cache_name = 'app-v12'; // bump the version each release self addeventlistener 'activate', event => { event waituntil caches keys then names => promise all names filter name => name !== cache_name map name => caches delete name // delete previous-version caches ; } ; // check usage and clean up on your own async function checkstorage { if !navigator storage? estimate return; const { usage } = await navigator storage estimate ; if usage > 30 * 1024 * 1024 { // e g over 30mb await trimthumbnailcache ; // delete least recently used items first } } if what you removed from the package just piles up in the cache instead, the saving disappears the strategy of moving large json/media to a runtime fetch 5 2, 5 3 leads to real storage savings only when a cap and cleanup policy are in place too in closing storage flash optimization comes down to four points don't ship what you don't need — start by clearing out unneeded features/decorative assets, remove unused code/css/dependencies/font weights, exclude dev files that tag along, and move large data/media to runtime ship what you do need in its smallest form — don't make an image out of what css can draw, handle variants of the same asset with code, and use production builds minify/tree-shaking , image resize/lightweight formats/compression, and font subsetting/woff2 manage what accumulates after install — put caps and lifetimes on cache/stored data, and clean up old-version caches on app update automate in the build pipeline and measure — bake image optimization and bundle minimization into the build, and keep watching the bundle analyzer and final package size to prevent size regressions a small app installs and updates fast, saves storage, and even starts faster ↑ back to top
Develop Smart Hospitality Display
docweb app html5 flash storage optimization guide terminology here, "flash" means the device's flash memory storage where the app is installed and stored it has nothing to do with adobe flash nature of this document this is a best-practice guide it is not intended to mandate compliance or to trigger any action based on compliance — use it as a reference for better app quality and user experience contents why storage size optimization matters what takes up space minimize bundle code size with build options image & graphics asset optimization fonts & other assets what not to bundle managing storage that accumulates after install 1 why storage size optimization matters a tv's flash storage is limited and shared by the system and many apps a large app package causes the following problems installs/updates are slower and more likely to fail the larger the size, the longer the download/write, and installs/updates can fail when storage is tight it pressures storage when one app takes a lot of space, there's less room for other apps to install and less system cache space, degrading the whole device's usability it leads to loading cost larger code/assets increase parse/decode load, lengthening startup and affecting ram usage too the problem doesn't end at install time the cache/stored data the app creates while running occupies the same flash even if you make the package small, occupied space keeps growing if you don't manage this conversely, keeping the app small makes installs/updates fast, reduces download traffic, frees storage, and improves startup performance core principle ① don't ship what you don't need · ② ship what you do need in its smallest form · ③ manage what accumulates after install · ④ automate this in your build pipeline if you rely on doing it by hand every time, something will always slip through this document is a companion to the memory optimization guide, which covers ram runtime memory making assets smaller reduces not only storage but also the runtime memory spent on decoding/parsing 2 what takes up space first, understand what dominates your app package's size usually the order of magnitude is as follows asset description main way to reduce images backgrounds, posters, icons, sprites resize · lightweight formats · compression section 4 javascript/css bundle app code + libraries minify · tree-shaking · dependency diet section 3 fonts web fonts especially cjk subset · woff2 section 5 local media intro videos, sound effects, etc minimize · compress · switch to streaming section 5 other data json and static files bundled in minimize · move to runtime fetch section 5 files that tag along source maps, tests/mocks, original images, unused assets exclude from packaging section 6 measure first use a bundle analyzer to see with your own eyes which modules/assets take up space before you touch anything bundle analysis webpack-bundle-analyzer, rollup-plugin-visualizer, source-map-explorer file assets sort your build output dist directory by file size and review the biggest first final package record the package size for each release to keep a trend this value directly determines the space it takes on the device often a handful of large items account for most of the size before polishing many small ones, it's more efficient to handle the largest assets first 3 minimize bundle code size with build options the javascript/css you load takes storage by itself most popular bundlers/frameworks provide size optimization by default in their production build, so simply turning the options on correctly yields a big win option names and defaults change between tool versions the config examples below are meant to convey the gist when applying them for real, check the current version's options in the official docs linked at the end of each subsection 3 1 common principles regardless of framework always ship a production build development builds include warnings, debug code, and source maps, which are large minify js with terser/esbuild, css with cssnano/esbuild — strip whitespace/comments and shorten identifiers tree-shaking remove unused code works well only with es modules import/export choose libraries that support tree-shaking esm, sideeffects false remove unused css use purgecss, or the purge/content settings of frameworks like tailwind, to drop classes you don't use exclude source maps from the package source map files are very large don't include them in the shipped package; store them separately if needed dependency diet don't pull in a heavy library whole for one or two features; use only the parts you need, or consider a lighter alternative or your own implementation also remove duplicate dependencies that do the same thing don't let multiple versions of the same library get bundled together as the dependency tree deepens, it's common for two or three different versions of the same library to be included check for duplicate versions with npm ls <package>, and unify versions dedupe, overrides/resolutions so only one copy remains verify with a bundle analyzer don't inline images as base64 base64 is about 33% larger than the raw bytes, and when mixed into a js/css bundle it also lives in runtime memory as a string set the bundler's inline threshold small or 0 and keep images as separate files webpack rule parser dataurlcondition maxsize, vite build assetsinlinelimit avoid excessive transpilation/polyfills lowering syntax the target platform already supports down-leveling needlessly grows the code set your build target to the target environment set a size budget and enforce it in the build define a baseline for total output size so the build warns/fails when exceeded — this structurally blocks size regressions size-limit, bundlesize; angular has built-in budgets — see 3 6 know precisely — the scope of code splitting splitting code per screen with dynamic import benefits initial load time and runtime memory, but does not reduce the total amount of code bundled into the package what reduces storage total size is tree-shaking, minify, removing dependencies, and removing unused css apply the two separately 3 2 webpack mode 'production' auto-enables terser minification, tree-shaking, scope hoisting optimization usedexports, optimization minimize true css css-minimizer-webpack-plugin analysis webpack-bundle-analyzer // webpack config js essentials module exports = { mode 'production', // apply production optimizations at once devtool false, // keep source maps out of the package optimization { usedexports true, // tree-shaking minimize true, // terser minification splitchunks { chunks 'all' }, // split common modules dedupe }, module { rules [ { test /\ png|jpe?g|webp|svg $/i, type 'asset/resource', // output as separate files, no base64 inlining }, ], }, }; official docs production · tree shaking 3 3 vite / rollup a vite production build vite build performs minify + tree-shaking by default build sourcemap false to exclude source maps build minify esbuild by default, or terser , build rollupoptions output manualchunks to shape chunks analysis rollup-plugin-visualizer // vite config js essentials export default { build { minify 'esbuild', // fast, strong minification sourcemap false, // exclude source maps from the package cssminify true, assetsinlinelimit 0, // disable base64 image inlining rollupoptions { output { manualchunks { vendor ['large-shared-library'] } }, }, }, }; official docs vite — building for production · rollup — configuration options 3 4 react always ship a production build node_env=production — development builds include warnings and validation code and are large keep dev-only tools tests, mocks, debug panels out of the production bundle if the runtime weight is a burden, consider an interface-compatible lightweight alternative e g , the preact family use react lazy + suspense for per-screen splitting benefits initial load/memory — see the note in 3 1 for the total-size perspective official docs build a react app from scratch 3 5 vue the production build removes development warnings and hints sfcs vue and <script setup> reduce unnecessary code at compile time reduce unused global component/plugin registrations, and import in a tree-shakable form official docs production deployment 3 6 angular build with the production configuration aot compilation and the build optimizer are enabled by default set bundle budgets so the build warns/fails when size exceeds a threshold, preventing size regressions // angular json essentials — cap bundle size "budgets" [ { "type" "initial", "maximumwarning" "500kb", "maximumerror" "1mb" } ] official docs building angular apps includes size budget configuration 4 image & graphics asset optimization images usually account for the largest share of an app package the key is to not create images you don't need, keep only one copy of what you do need, size it to the minimum needed for display, use the most efficient format, and compress it as much as possible the impact shrinks toward the bottom, so apply these from the top down 4 1 first, check whether it needs to be an image at all the smallest image is no image the following need no file at all if drawn with css or code solid/gradient backgrounds → background-color, linear-gradient rounded corners/borders/shadows → border-radius, border, box-shadow dividers/dotted lines → border, outline repeating patterns → repeating-linear-gradient simple shapes circles, triangles, badge backgrounds, ribbons → css or inline svg gauges/progress bars/simple charts → draw with css or canvas /* css instead of an image gradient background + rounded corners + shadow */ poster-overlay { background linear-gradient to top, rgba 0, 0, 0, 8 , transparent ; border-radius 8px; box-shadow 0 4px 12px rgba 0, 0, 0, 4 ; } it's common to turn a design mockup into a file just because it arrived as an image go through your asset list and ask "can this be done with css?" for each one not only does size drop, but color/size changes become easier too 4 2 keep one copy of an asset and handle variants with code keeping color/direction/state variants of the same graphic as separate files multiplies the asset count handle variants with css color variants → keep svg with fill="currentcolor" and control via css color for raster icons, use mask-image + background-color, or filter direction variants → don't keep left/right arrows as two files; use transform scalex -1 , and rotate 180deg for up/down rtl layout support works the same way state variants normal / focus / selected → instead of a per-state image set, change only color/size/opacity with css size variants → a single svg covers all sizes /* handle color/direction variants with one icon copy */ icon { color #999; } /* svg uses fill="currentcolor" */ icon focus, icon is-selected { color #fff; } icon--flip { transform scalex -1 ; } /* reuse the left arrow as a right arrow */ turning 24 icons into files across 3 colors × 2 directions yields 144 files reusing the same asset keeps it at 24 4 3 resize to display size don't bundle a 4k original for an image shown at 200×300 bundling a file pre-resized to the display size greatly reduces size if you need different assets per resolution fhd/4k , prepare only the sizes you actually use 4 4 prefer lightweight formats photos / complex images → webp recommended smaller than jpeg/png at equal quality it's widely supported by tv web engines, making it the safest choice even smaller alternative → avif higher compression, but it may not be supported depending on the web engine version always verify support on your target platform's chromium version, and use webp if you're unsure logos / icons / simple shapes → svg being vector, they're small and crisp regardless of resolution bundle multiple icons as an svg sprite animation → avoid gif animated gifs are large and use a lot of decode memory use css animations for simple ui motion loading spinners, emphasis effects , and animated webp when raster animation is truly required if you don't need transparency, use a format without an alpha channel jpeg/lossy webp 4 5 squeeze further with lossless/lossy compression tools even after choosing a format, re-compressing with a dedicated tool can reduce size further with no or minimal quality loss png lossless zopflipng powerful but slow , oxipng/optipng if the color count is low, pngquant palette-based lossy saves a lot jpeg mozjpeg cjpeg , jpegtran lossless re-compression webp cwebp lossy via -q, lossless via -lossless svg svgo remove metadata, redundant decimals, comments general strip unnecessary metadata such as exif # lossless png optimization zopflipng zopflipng -m in png out png # for pngs with few colors, palette lossy compression is far more effective pngquant --quality=65-85 --output out png in png # jpeg → webp photos lossy, quality 75-85 recommended cwebp -q 80 photo jpg -o photo webp # logo / transparent png → lossless webp cwebp -lossless logo png -o logo webp # svg optimization svgo icon svg -o icon min svg lossy vs lossless for photos, lossy compression webp/jpeg around quality 75-85 gives the best quality-per-byte use lossless or a palette pngquant for logos, transparent images, and ui elements that must stay crisp always check quality by eye after compression and adjust the quality value 4 6 automate it in the build pipeline image optimization is easy to forget if done by hand each time handle it automatically at build time general purpose the imagemin family of plugins imagemin-webp, imagemin-pngquant, imagemin-zopfli, imagemin-mozjpeg, imagemin-svgo node pipeline sharp fast resize + format conversion bundler plugins vite/webpack image-optimization plugins that convert/compress automatically at build time // example automate resize + webp conversion with sharp build script import sharp from 'sharp'; await sharp 'poster_original jpg' resize 400, 600 // resize to display size webp { quality 80 } // lightweight format + lossy compression tofile 'poster_400x600 webp' ; keep the originals separately optimization resize/lossy compression is irreversible, so keep the source originals in your repository/asset store and bundle the optimized versions only into the build output 5 fonts & other assets 5 1 fonts bundle only the weights/styles you truly need limit to regular/bold and exclude unused light, thin, italic use subset fonts that contain only the characters you actually use this is especially effective for cjk chinese/japanese/korean , where a full-glyph font can reach several mb use woff2 — the best-compressed font format if the platform's built-in fonts are enough, not bundling a web font at all is the surest saving 5 2 local media minimize the count and length of media intro videos, sound effects bundled into the package, and compress with an appropriate codec/bitrate where possible, don't bundle it locally — stream/download it at runtime to keep it out of the package size but you must also have a cleanup policy so fetched files don't keep piling up on the device section 7 5 3 other data minimize large json/static data bundled in, and if it isn't needed on the first screen, move it out of the package via a runtime fetch here too, cap the response cache so it doesn't grow without bound section 7 6 what not to bundle what you didn't ship needs no optimization no matter how much you shrink things with compression/resizing, nothing is a surer saving than leaving out features and files you don't need in the first place 6 1 re-examine the features and assets themselves the question that should come before technical optimization is "is this really needed?" as releases pile up, unused things accumulate low-usage features — if you have usage metrics, check them and remove or defer to the next release screens/features that are barely used dropping one feature often has more impact than compressing dozens of assets large decorative assets — intro videos, splash animations, full-screen background illustrations if it's a flourish users skip every time, it's not worth paying for in size frame-image animations — especially expensive first consider whether a css animation can give the same impression 4 1 experiment/event leftovers — a/b test variants, seasonal event assets, and pilot features are often left behind after they end this judgment is hard for a developer to make alone it's more effective to have a step that reviews "what can be dropped this time" together with planning/design before release 6 2 things that commonly tag along files that got in by accident often take more space than the assets you added on purpose removing such files has no effect on app behavior, so it's the lowest-risk, surest saving development source tree node_modules/, git/, build caches, dev config files source maps map files and the //# sourcemappingurl comments that point to them test/dev tools test files and snapshots, storybook, mock apis/sample data, debug panels design originals psd/ai/sketch files, un-optimized high-resolution original images — keep originals in the repository and bundle only the optimized versions documents readme, changelogs, bundles of dependency license text in the minimum form required if you have a notice obligation unused assets images, icons, fonts, and json no longer referenced after a ui refresh or plan change duplicate assets the same image included several times under different names comparing file hashes finds these easily unused locales translation files/region-specific assets for unsupported languages if you support many languages, consider loading only the selected language at runtime 6 3 use an "include list," not an "exclude list" listing what to exclude misses things every time a new file appears structure it as explicitly specifying only what to bundle configure the build so the output directory dist contains only the files needed to run, and package that directory as-is add a step just before packaging that prints the file list and sizes for a visual check unexpected files are usually caught at this step # show the 20 largest files in the output pre-release check find dist -type f -printf '%s\t%p\n' | sort -rn | head -20 # find duplicate files same content hash find dist -type f -exec md5sum {} + | sort | uniq -w32 -d put this check into your release script, and record the total output size alongside it — combined with the size budget from 3 1, it prevents size regressions 7 managing storage that accumulates after install storage isn't fixed at install time the cache/data the app creates as it runs occupies the same flash, and without a cap it keeps growing it's not rare for an app with a small install size to occupy several times that a few months later 7 1 what accumulates store what accumulates management point cache api / service worker image/js/api-response caches version the cache name; delete old-version caches indexeddb content lists, thumbnails, watch history cap item count/total; clean up old items localstorage settings, tokens, small state values don't put large data/images in it http cache network responses control lifetime via cache headers app data area downloaded media/thumbnails cap total downloads; provide a user delete option 7 2 how to do it set caps set limits on both count and total — e g , "thumbnail cache max 200 items / 20mb" — and when exceeded, evict the least recently used first lru set lifetimes give re-fetchable data content metadata, etc a ttl and delete it on expiry data kept "just in case it's needed" is the main cause of accumulation delete old-version caches on app update put a version in the cache name and remove the previous cache once the new version activates skip this cleanup and one copy of the cache piles up with every update check usage yourself read current usage with navigator storage estimate and clean up on your own when a threshold is crossed check support on your target web engine give users a way to delete offering "clear cache" in the settings screen lets users short on storage resolve it without uninstalling the app // remove old-version caches on app update service worker const cache_name = 'app-v12'; // bump the version each release self addeventlistener 'activate', event => { event waituntil caches keys then names => promise all names filter name => name !== cache_name map name => caches delete name // delete previous-version caches ; } ; // check usage and clean up on your own async function checkstorage { if !navigator storage? estimate return; const { usage } = await navigator storage estimate ; if usage > 30 * 1024 * 1024 { // e g over 30mb await trimthumbnailcache ; // delete least recently used items first } } if what you removed from the package just piles up in the cache instead, the saving disappears the strategy of moving large json/media to a runtime fetch 5 2, 5 3 leads to real storage savings only when a cap and cleanup policy are in place too in closing storage flash optimization comes down to four points don't ship what you don't need — start by clearing out unneeded features/decorative assets, remove unused code/css/dependencies/font weights, exclude dev files that tag along, and move large data/media to runtime ship what you do need in its smallest form — don't make an image out of what css can draw, handle variants of the same asset with code, and use production builds minify/tree-shaking , image resize/lightweight formats/compression, and font subsetting/woff2 manage what accumulates after install — put caps and lifetimes on cache/stored data, and clean up old-version caches on app update automate in the build pipeline and measure — bake image optimization and bundle minimization into the build, and keep watching the bundle analyzer and final package size to prevent size regressions a small app installs and updates fast, saves storage, and even starts faster ↑ back to top
tutorials game, mobile
blogintro foldable technology for mobile is a ground-breaking experience not only for users, but also for developers. the presence of many form factors, like immersive display, app continuity, flex mode, and ux optimization, challenge developers to think outside of the box to adapt to this technology. there are already a large number of blogs talking about general application considerations, but what about gaming on a foldable device? in this blog, we look at the challenges and new opportunities foldable devices present for mobile game development. this blog focuses on unity and unreal engine as they are the most common game engines for mobile development. however, a lot of the information applies to other engines as well. app continuity and multi-window mode firstly, let's establish that the large internal display is called the main display whilst the smaller external display is called the cover display. app continuity and multi-window mode are two key features of foldable smartphones. with app continuity, you can seamlessly transition between the cover display to the main display without needing to reopen the app. with multi-window, you can run multiple apps at once and multitask like never before. app continuity moving an app between the two displays affects the size, density, and aspect ratio of the display it can use. app continuity is enabled and disabled from the android manifest of the app: the <activity> element has a new attribute called resizeableactivity. if not set, this attribute defaults to true, thus enabling app continuity and assuming the app fully supports both app continuity and multi-window mode. if set to true then the application automatically attempts to resize when moving between displays, as shown in the video below. if set to false then the system still allows you to transition from the cover display to the main display but does not attempt to resize the application. instead, a new button appears, allowing the user to restart the application at a time of their choosing, as shown below. when the app transitions between the two displays, the activity is destroyed and recreated. as such, the app data needs to be stored and then used to restore the previous state. from testing, both unity and unreal engine appear to handle this process already. however, if you are developing on a custom engine, it is worth confirming that your engine/app can handle this. continue on cover screen by default, foldable devices simply lock the device when closing the main display. however, it is possible for users to disable this functionality for certain apps. in the device's display settings, there is an option called "continue on cover screen" that has to be enabled by the user. entering this menu displays a list of all applications on the device and enables users to set specific applications to not lock the device when closing the main display. if an application has resizeableactivity set to false then the option to enable this functionality is greyed out and is not available. if your application supports resizing and app continuity then you should make sure to test that this works as users may wish to enable this functionality on their device. multi-window mode multi-window mode can allow up to three apps to run at the same time in a split-screen arrangement (see left image) or for two apps to run in pop-up mode which keeps one app full-screen but creates another app in a smaller pop-up window (see right image). just like app continuity, this is enabled using the attribute resizeableactivity in the android manifest. if resizeableactivity is not set then it defaults to true. so again, it is recommended that you set this yourself to ensure that your app works as intended. app continuity without multi-window mode if you would like your app to support app continuity but don't want it to be used by the multi-window mode, then this is possible. first, you should set the resizableactivity attribute to false to disable both app continuity and multi-window mode. next use the following <meta-data> element in your <activity> element: <meta-data android:name="android.supports_size_changes" android:value="true" /> this re-enables the app continuity feature without enabling multi-window mode. game engine features to use if using existing game engines then there are several existing features that are useful if developing for foldable devices. this section provides a high-level look at these features. for more in-depth information, i recommend visiting the engine's documentation. unity unity is a very good engine for developing on foldable devices, requiring little to no setup to enable features for foldable devices. the engine automatically handles resizing of the application without any modifications required. the resizeableactivity attribute is controlled by an option in the player settings: resizable window. when enabled, resizeableactivity appears to be set to true; when disabled, resizeableactivity appears to be set to false. note this option is not available in older versions of unity. if this option is not present then you have to set the resizeableactivity manually. the engine also provides a very robust ui scaling system that helps to reduce the amount of work required to create a ui that works across both the cover display and main display. the canvas scaler and anchor system work very well with foldable devices and work to resize and position elements consistently across the two displays, thus preventing developers from having to create two ui designs (one for cover display and one for main display). unreal engine 4 unreal engine 4 is another good engine for developing on foldable devices, although it requires a little more work to get it set up for foldable devices. first of all, unreal engine 4 by default disables the resize event on android devices, however, it is possible to re-enable it in device profiles using the console variable: r.enablenativeresizeevent = 1 unreal engine 4 by default also has a max aspect ratio of 2.1. this is, however, too small for the cover display of some foldable devices which can result in black bars on either side of the image. fortunately, unreal engine makes this value easily changeable in the project settings: platform -> android -> max aspect ratio from my testing, 2.8 is a good value. however, i recommend users experiment to find the best value. unreal engine's umg (unreal motion graphics ui designer) has a comprehensive set of tools for creating responsive ui designs. this system automatically scales ui elements to fit the screen size, and the anchor system is also very useful for ensuring the ui elements are positioned correctly between the two displays. samsung remote test lab no matter what engine you use, the best way to ensure your app works well on a foldable device is to test it on a foldable device. samsung remote test lab has a range of foldable devices available for developers to test their applications on if getting hold of a physical device is too difficult or expensive. all you need to do is create a samsung account and you can start using these devices for testing. android jetpack windowmanager despite being very good engines for foldable game development, neither unity nor unreal currently provide information about the current state of the foldable device (that is, is it open/closed/halfway?, where is the fold positioned?, what is the fold's orientation? and so forth). however, android has recently created a new library as a part of their android jetpack libraries that enables developers to access this information and make use of it in their apps. android jetpack in their own words is "a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across android versions and devices so that developers can focus on the code they care about." windowmanager is a new library from the android jetpack suite, intended to help application developers support new device form factors and multi-window environments. the library had its 1.0.0 release in january 2022, and targeted foldable devices but—according to the documentation—future versions will extend to more display types and window features. more technical resources this blogpost has an accompanying technical blogpost and code lab tutorial, demonstrating how to use the android jetpack windowmanager with both unity and unreal to take advantage of the flex mode feature of samsung's foldable devices. i recommend starting with the jetpack windowmanager blogpost to learn how to set up the windowmanager in java: https://developer.samsung.com/galaxy-gamedev/blog/en-us/2022/07/20/how-to-use-jetpack-window-manager-in-android-game-dev then, follow it up with the code labs to learn how to make use of the windowmanager to implement a simple flex mode setup in either unreal or unity: https://developer.samsung.com/codelab/gamedev/flex-mode-unreal.html https://developer.samsung.com/codelab/gamedev/flex-mode-unity.html also, visit our game developer community to join the discussion around mobile gaming and foldable devices. click here to find out more about other design considerations when designing apps for foldable devices and large screens. final thoughts foldable devices provide a richer experience than regular phones. hopefully, this blogpost and accompanying tutorial have provided you with the necessary information to begin taking advantage of these new form factors and start providing users a richer foldable experience. additional resources on the samsung developers site the samsung developers site has many resources for developers looking to build for and integrate with samsung devices and services. stay in touch with the latest news by creating a free account and subscribing to our monthly newsletter. visit the galaxy store games page for information on bringing your game to galaxy store and visit the marketing resources page for information on promoting and distributing your android apps. finally, our developer forum is an excellent way to stay up-to-date on all things related to the galaxy ecosystem.
Lochlann Henry Ramsay-Edwards
technical_insights cloud services, account management
blogsamsung account is a global account service that brings the samsung universe together, from all samsung services to online and offline stores. it handles large-scale traffic with security and reliability. as a core samsung service, all tasks on samsung account, from general service deployments to cloud infrastructure upgrades, must be carried out without interruption to the service. this blog introduces the architecture designed for an elastic kubernetes service upgrade and shares our experience with upgrading the cloud infrastructure without interruptions to the high-traffic samsung account service. what is samsung account? samsung account is an account service that brings together more than 60 services and applications in 256 countries with over 1.7 billion user accounts. it is used for samsung electronics services including samsung pay, smartthings, and samsung health, as well as for authentication on various devices such as mobile, wearable, tv, pc, etc. samsung account helps deliver a secure and reliable customer experience with one account on a variety of contact points from online stores (such as samsung.com) and offline stores to our customer services. evolution of current samsung account architecture as the number of user accounts and connected services has grown, the infrastructure and service of samsung account has also evolved. it switched to the aws-based cloud for service stability and efficiency in 2019, and is currently servicing 4 regions: 3 global regions (eu, us, ap) and china. currently, samsung account consists of more than 70 microservices. in 2022, samsung account switched to the kubernetes base in order to reliably support microservices architecture (msa). kubernetes is an open-source orchestration platform that supports the easy deployment, scaling, and management of containerized applications. in 2023, samsung account reinforced disaster recovery (dr) to be able to provide failover across global regions, and expanded the ap region to improve user experience. in other words, samsung account has repeatedly evolved its infrastructure and services, and is currently running stably with traffic over 2.7 million requests per second (rps) and over 200k db transactions per second (tps). each aws-based samsung account region, with its own virtual private cloud, (vpc) is accessible through user devices, server-to-server, or the web. in particular, the web access provides a variety of features such as samsung.com and tv qr login on aws cloudfront, a content delivery network (cdn). samsung account microservices are being serviced on containers within elastic kubernetes service (eks) clusters, and internal communication between regions uses vpc peering. samsung account is using several managed services from aws to deliver various features. it is using aurora, dynamodb, and managed streaming for apache kafka (msk) as storage to build data sync between regions, and it provides account services based on different managed services including elasticache, pinpoint, and simple queue service (sqs). let's elaborate on the aws managed services that samsung account uses. the first is eks, which is a kubernetes service for running over 70 microservices on msa. next, aurora is used to save and query data as an rdb and dynamodb does the same but as a nosql database. along with them, elasticache (redis oss) is used to manage cache and sessions and msk handles delivering events from integrated services and data sync. if you’re building an aws-based service yourself, you would probably use these managed services as well. frustrating upgrades contrasting the convenience of managed services there is a major challenge to consider when you use these managed services, though. end of support comes, on average, after 1.5 years for eks and 2 years for aurora. various other services like elasticache and msk face the same problem. such service support termination is natural for aws, but upgrading these services when support ceases is often a painful task for those running them. because operation resources are often reduced upon switching to the cloud, large-scale upgrades that come around every 1 or 2 years have to be performed without enough resources for emergency response. these managed service upgrades put a major burden on samsung account. more than 60 integrated services have to be upgraded without causing interruptions, and the upgrades must be rolled out across a total of 4 regions. on top of that, samsung account is developing and running more than 70 microservices, so a significant amount of support and cooperation from development teams is required. the most challenging of all is that the upgrades need to be performed while dealing with traffic of over 2.7m rps and db traffic of 200k tps. eks upgrade sequence and restrictions you might think upgrading eks on aws is easy. in general, when upgrading eks, you start with the control plane including etcd and the apis that manage eks. afterwards, you move to the data plane where the actual service pods are on, and finally to eks add-ons. in theory, it is possible to upgrade eks following this sequence without any impact to the service operation. however, there are restrictions to general eks upgrades. if an upgrade fails in any of the 3 steps above due to missing eks api specs or incompatibility issues, a rollback is not available at all. in addition, it is difficult to do a compatibility check for the services and add-ons in advance. multi-cluster architecture for non-disruptive eks upgrades after much thought, samsung account decided to go with a simple but reliable option to perform eks upgrades. it's possible that many other services are using a similar way to upgrade eks or run actual services. samsung account chose to upgrade eks based on a multi-cluster architecture with 2 eks clusters. the architecture is built to enable an existing eks version to continue providing the service, while a new eks version on a separate cluster performs a compatibility validation with various microservices and add-ons before receiving traffic. the advantage of this method is that you can implement a rollback plan where the old eks version takes over the traffic if any issues occur when switching to the new eks version. a lesson we have learned from providing the samsung account service under high traffic is that there will be issues when you actually start processing traffic, no matter how perfectly you've built your infrastructure or service. for these reasons, it is essential to have a rollback plan in place whenever you deploy a service or upgrade your infrastructure. when you perform a multi-cluster upgrade, traffic must be switched between the old and new eks clusters. simply put, there are 2 main approaches. one approach is to switch traffic by placing a proxy server between the 2 clusters. the other approach is to switch the target ip using dns. needless to say, there may be a variety of other ways to accomplish this. in the first option, using a proxy server, you may encounter overload issues when handling high-volume traffic, such as with samsung account. additionally, there are too many application load balancers (albs) used for approximately 70 microservices, making it impractical to create a proxy server for each alb. in the second option, using dns, the actual user, client, and server replace the service ip of the old eks with that of the new eks during a dns lookup, redirecting requests to a different target at the user level. the dns option does not require a proxy server, and switching traffic is easy by simply editing the dns record. however, there is a risk that the traffic switch might not happen immediately due to propagation-related delays with dns. the dns-based traffic switch architecture was applied to achieve a non-disruptive eks upgrade for samsung account. let us describe the dns layers of samsung account with a hypothetical example. the top domain is account.samsung.com, and there are 3 global region domains under it, classified based on latency or geolocation. for us.account.samsung.com, the layers are split into service.us-old-eks.a.s.com and service.us-new-eks.a.s.com, representing the old and new domains. this is a simple, hypothetical example. in reality, samsung account uses more dns layers. during the recent eks upgrade, we switched traffic between the internal domains of the 2 eks clusters based on weighted records while adjusting the ratio, rather than switching all at once. for instance, when a user sends a request to account.samsung.com, it goes through us.account.samsung.com, and the actual eks service ip is applied at the end based on the specified weight. retrospective of the non-disruptive eks upgrade in summary, i would say "it's a successful upgrade if the connected services haven't noticed." with this eks upgrade, we deployed and switched traffic for a total of 3 regions, 6 eks clusters, and more than 210 microservices over the course of one month. the traffic switch was conducted with ratios set based on each service's load and characteristics, and no issues with connected services were reported during this one month eks upgrade. of course, as they say, "it's not over until it's over." we did have a minor incident where there were insufficient internal ips in the internal subnet due to many eks nodes and service pods becoming active simultaneously, which scared us for a moment. we secured the ip resources by reducing the number of pods for kubelet and add-ons by about a thousand and quickly scaling up the eks nodes. one thing we realized while switching traffic with dns is that 99.9% of the entire traffic can be switched within 5 minutes when the dns weight is adjusted. closing note richard branson, co-founder of virgin group, once said, "you don't learn to walk by following rules. you learn by doing, and by falling over." samsung account has been growing and evolving, addressing many bumps along the way. we continue to resolve various challenges with the stability of our service as the priority, keeping this "learning while falling over" spirit in mind. thank you.
Je-Min Kim
tutorials game, mobile
blogthe samsung developers team works with many companies in the mobile and gaming ecosystems. we're excited to support our partner, arm, as they bring timely and relevant content to developers looking to build games and high-performance experiences. this vulkan extensions series will help developers get the most out of the new and game-changing vulkan extensions on samsung mobile devices. android is enabling a host of useful new vulkan extensions for mobile. these new extensions are set to improve the state of graphics apis for modern applications, enabling new use cases and changing how developers can design graphics renderers going forward. i have already provided information about ‘maintenance extensions’. however, another important extension that i explore in this blog is ‘legacy support extensions’. vulkan is increasingly being used as a portable “hal”. the power and flexibility of the api allows for great layered implementations. there is a lot of effort spent in the ecosystem enabling legacy graphics apis to run efficiently on top of vulkan. the bright future for driver developers is a world where gpu drivers only implement vulkan, and where legacy apis can be implemented on top of that driver. to that end, there are several features which are generally considered backwards today. they should not be used in new applications unless absolutely required. these extensions exist to facilitate old applications which need to keep running through api translation layers such as angle, dxvk, zink, and so on. vk_ext_transform_feedback speaking the name of this extension causes the general angst level to rise in a room of driver developers. in the world of direct3d, this feature is also known as stream-out. the core feature of this extension is that whenever you render geometry, you can capture the resulting geometry data (position and vertex outputs) into a buffer. the key complication from an implementation point of view is that the result is ordered. this means there is no 1:1 relation for input vertex to output data since this extension is supposed to work with indexed rendering, as well as strip types (and even geometry shaders and tessellation, oh my!). this feature was invented in a world before compute shaders were conceived. the only real method to perform buffer <-> buffer computation was to make use of transform feedback, vertex shaders and rasterizationdiscard. over time, the functionality of transform feedback was extended in various ways, but today it is essentially obsoleted by compute shaders. there are, however, two niches where this extension still makes sense - graphics debuggers and api translation layers. transform feedback is extremely difficult to emulate in the more complicated cases. setting up shaders in vertex-like shader stages, you need to set up which vertex outputs to capture to a buffer. the shader itself controls the memory layout of the output data. this is unlike other apis, where you use the graphics api to specify which outputs to capture based on the name of the variable. here is an example vulkan glsl shader: #version 450 layout(xfb_stride = 32, xfb_offset = 0, xfb_buffer = 0, location = 0) out vec4 vcolor; layout(xfb_stride = 32, xfb_offset = 16, xfb_buffer = 0, location = 1) out vec4 vcolor2; layout(xfb_buffer = 1, xfb_stride = 16) out gl_pervertex { layout(xfb_offset = 0) vec4 gl_position; }; void main() { gl_position = vec4(1.0); vcolor = vec4(2.0); vcolor2 = vec4(3.0); } the resulting spir-v will then look something like: capability transformfeedback executionmode 4 xfb decorate 8(gl_pervertex) block decorate 10 xfbbuffer 1 decorate 10 xfbstride 16 decorate 17(vcolor) location 0 decorate 17(vcolor) xfbbuffer 0 decorate 17(vcolor) xfbstride 32 decorate 17(vcolor) offset 0 decorate 20(vcolor2) location 1 decorate 20(vcolor2) xfbbuffer 0 decorate 20(vcolor2) xfbstride 32 decorate 20(vcolor2) offset 16 binding transform feedback buffers once we have a pipeline which can emit transform feedback data, we need to bind buffers: vkcmdbindtransformfeedbackbuffersext(cmd, firstbinding, bindingcount, pbuffers, poffsets, psizes); to enable a buffer to be captured, vk_buffer_usage_transform_feedback_buffer_bit_ext is used. starting and stopping capture once we know where to write the vertex output data, we will begin and end captures. this needs to be done inside a render pass: vkcmdbegintransformfeedbackext(cmd, firstcounterbuffer, counterbuffercount, pcounterbuffers, pcounterbufferoffsets); a counter buffer allows us to handle scenarios where we end a transform feedback and continue capturing later. we would not necessarily know how many bytes were written by the last transform feedback, so it is critical that we can let the gpu maintain a byte counter for us. vkcmddraw(cmd, …); vkcmddrawindexed(cmd, …); then we can start rendering. vertex outputs are captured to the buffers in-order. vkcmdendtransformfeedbackext(cmd, firstcounterbuffer, counterbuffercount, pcounterbuffers, pcounterbufferoffsets); once we are done capturing, we end the transform feedback and, with the counter buffers, we can write the new buffer offsets into the counter buffer. indirectly drawing transform feedback results this feature is a precursor to the more flexible indirect draw feature we have in vulkan, but there was a time when this feature was the only efficient way to render transform feedbacked outputs. the fundamental problem is that we do not necessarily know exactly how many primitives have been rendered. therefore, to avoid stalling the cpu, it was required to be able to indirectly render the results with a special purpose api. vkcmddrawindirectbytecountext(cmd, instancecount, firstinstance, counterbuffer, counterbufferoffset, counteroffset, vertexstride); this works similarly to a normal indirect draw call, but instead of providing a vertex count, we give it a byte count and let the gpu perform the divide instead. this is nice, as otherwise we would have to dispatch a tiny compute kernel that converts a byte count to an indirect draw. queries the offset counter is sort of like a query, but if the transform feedback buffers overflow, any further writes are ignored. the vk_query_type_transform_feedback_stream_ext queries how many primitives were generated. it also lets you query how many primitives were attempted to be written. this makes it possible to detect overflow if that is desirable. vk_ext_line_rasterization line rasterization is a tricky subject and is not normally used for gaming applications since they do not scale with resolution and their exact behavior is not consistent across all gpu implementations. in the world of cad, however, this feature is critical, and older opengl apis had extensive support for quite fancy line rendering methods. this extension essentially brings back those workstation features. advanced line rendering can occasionally be useful for debug tooling and visualization as well. the feature zoo typedef struct vkphysicaldevicelinerasterizationfeaturesext { vkstructuretype stype; void* pnext; vkbool32 rectangularlines; vkbool32 bresenhamlines; vkbool32 smoothlines; vkbool32 stippledrectangularlines; vkbool32 stippledbresenhamlines; vkbool32 stippledsmoothlines; } vkphysicaldevicelinerasterizationfeaturesext; this extension supports a lot of different feature bits. i will try to summarize what they mean below. rectangular lines vs parallelogram when rendering normal lines in core vulkan, there are two ways lines can be rendered. if vkphysicaldevicelimits::strictlines is true, a line is rendered as if the line is a true, oriented rectangle. this is essentially what you would get if you rendered a scaled and rotated rectangle yourself. the hardware just expands the line along the perpendicular axis of the line axis. in non-strict rendering, we get a parallelogram. the line is extended either in x or y directions. (from vulkan specification) bresenham lines bresenham lines reformulate the line rendering algorithm where each pixel has a diamond shaped area around the pixel and coverage is based around intersection and exiting the area. the advantage here is that rendering line strips avoids overdraw. rectangle or parallelogram rendering does not guarantee this, which matters if you are rendering line strips with blending enabled. (from vulkan specification) smooth lines smooth lines work like rectangular lines, except the implementation can render a little further out to create a smooth edge. exact behavior is also completely unspecified, and we find the only instance of the word “aesthetic” in the entire specification, which is amusing. this is a wonderfully vague word to see in the vulkan specification, which is otherwise no-nonsense normative. this feature is designed to work in combination with alpha blending since the smooth coverage of the line rendering is multiplied into the alpha channel of render target 0’s output. line stipple a “classic” feature that will make most ihvs cringe a little. when rendering a line, it is possible to mask certain pixels in a pattern. a counter runs while rasterizing pixels in order and with line stipple you control a divider and mask which generates a fixed pattern for when to discard pixels. it is somewhat unclear if this feature is really needed when it is possible to use discard in the fragment shader, but alas, legacy features from the early 90s are sometimes used. there were no shaders back in those days. configuring rasterization pipeline state when creating a graphics pipeline, you can pass in some more data in pnext of rasterization state: typedef struct vkpipelinerasterizationlinestatecreateinfoext { vkstructuretype stype; const void* pnext; vklinerasterizationmodeext linerasterizationmode; vkbool32 stippledlineenable; uint32_t linestipplefactor; uint16_t linestipplepattern; } vkpipelinerasterizationlinestatecreateinfoext; typedef enum vklinerasterizationmodeext { vk_line_rasterization_mode_default_ext = 0, vk_line_rasterization_mode_rectangular_ext = 1, vk_line_rasterization_mode_bresenham_ext = 2, vk_line_rasterization_mode_rectangular_smooth_ext = 3, } vklinerasterizationmodeext; if line stipple is enabled, the line stipple factors can be baked into the pipeline, or be made a dynamic pipeline state using vk_dynamic_state_line_stipple_ext. in the case of dynamic line stipple, the line stipple factor and pattern can be modified dynamically with: vkcmdsetlinestippleext(cmd, factor, pattern); vk_ext_index_type_uint8 in opengl and opengl es, we have support for 8-bit index buffers. core vulkan and direct3d however only support 16-bit and 32-bit index buffers. since emulating index buffer formats is impractical with indirect draw calls being a thing, we need to be able to bind 8-bit index buffers. this extension does just that. this is probably the simplest extension we have look at so far: vkcmdbindindexbuffer(cmd, indexbuffer, offset, vk_index_type_uint8_ext); vkcmddrawindexed(cmd, …); conclusion i have been through the 'maintenance' and 'legacy support' extensions that are part of the new vulkan extensions for mobile. in the next three blogs, i will go through what i see as the 'game-changing' extensions from vulkan - the three that will help to transform your games during the development process. follow up thanks to hans-kristian arntzen and the team at arm for bringing this great content to the samsung developers community. we hope you find this information about vulkan extensions useful for developing your upcoming mobile games. the original version of this article can be viewed at arm community. the samsung developers site has many resources for developers looking to build for and integrate with samsung devices and services. stay in touch with the latest news by creating a free account or by subscribing to our monthly newsletter. visit the marketing resources page for information on promoting and distributing your apps and games. finally, our developer forum is an excellent way to stay up-to-date on all things related to the galaxy ecosystem.
Arm Developers
success story marketplace, mobile, foldable
blogjeanne hsu, senior marketing manager for developer relations at samsung, chatted with shilpi aggarwal, senior engineering manager in document cloud. she has been at adobe for 15 years, working on portable document format (pdf) technologies at all levels of the stack, with a deep interest in creating seamless customer experiences. jeanne hsu (jh): shilpi, what is your role at adobe? shilpi aggarwal (sa): i deliver products that power pdf creation and consumption across mobile form factors. i manage the adobe acrobat app on the android platform and provide best-in-class pdf experiences to millions of users every day. jh: what was your professional journey that led you to adobe? sa: at university i used adobe photoshop and acrobat reader on a daily basis, so i was familiar with the software. i joined adobe fresh out of college and immediately loved the culture. i am a true believer in adobe values, so i’ve stayed with adobe since the beginning of my career. jh: that’s a long time to be at one company. i noticed adobe’s core values are being genuine, exceptional, innovative, and involved. which values resonate the most for you? sa: being genuine and getting involved. it feels so easy to be myself here. adobe also values diversity and inclusion; everyone is equally valued. people have the freedom to speak out in meetings and can reach out to any executive. i treasure that. jh: how did covid-19 impact the team? sa: when the pandemic hit, adobe held a virtual all hands meeting and asked how people were doing and if there was anything they needed. i said i needed an oxygen cylinder for someone in india. an evp on the call messaged me 1:1 and said he had access to one. i was impressed that he would reach out to help like that. this level of support and engagement from leadership in the hour of need is what i value the most. jh: how did the relationship with samsung first start? sa: our samsung and adobe document cloud partnership started in 2018 with the debut of adobe scan on the galaxy note9. bixby vision was enabled to work seamlessly with adobe scan, giving customers the ability to get more done on the go. in 2020, we expanded our partnership with the launch of the adobe acrobat mobile app in the galaxy store. galaxy store users could download and subscribe to adobe acrobat mobile, which included capabilities to edit text and images, export to and from pdf, more advanced features to create pdfs, combine and organize pdfs, and more. adobe acrobat reader mobile app — best made for samsung app award jh: congrats on winning the 2021 best of galaxy store award — best made for samsung app — for adobe acrobat reader. what does it mean to win this award? sa: i am delighted and proud. our team was really happy to hear the news, and we had a small virtual party afterward. with the acrobat reader mobile app, our mission has always been to fundamentally change the way people consume and modify digital documents, and to become the first choice for pdf productivity for mobile-first users. i feel humbled by the chance to empower millions who use our app every day. i am grateful to our customers and to our amazing partners at samsung for recognizing us. jh: what makes your app unique? sa: people regularly work with documents on the go, and the pdf file format makes it easy to view most documents on a mobile device with formatting intact. with the acrobat mobile app, you can view pdfs for quick document reviews and edits, easy form filling and signing, and much more. it’s different from other mobile pdf solutions because it offers an end-to-end workflow for creating, editing, signing, reviewing, and storing pdfs across devices. acrobat was built for mobile, so you can read documents without pinching and zooming. you can organize paper documents digitally with mobile-first features like liquid mode and scan. and let’s not forget that adobe invented the pdf format and continues to innovate every day for the millions of people around the world who use the acrobat mobile app. jh: i heard about another intriguing feature for adobe acrobat reader called read out loud. tell us more about that. sa: yes, it’s part of our mobile first strategy. read out loud is a text-to-speech (tts) tool that reads text contained in pdf documents. it’s important for accessibility for all. jh: what else differentiates the adobe pdf experience for mobile users? sa: liquid mode senses your mobile device’s screen size and adjusts accordingly. you can change text size and spacing for better readability. you can also search text and expand images and charts. last year it was our most talked-about feature, with great reviews. users also like the form-filling experience and the ability to add signatures on forms. jh: i’m a big fan too. i love the form-filling and signature capabilities. it’s far better than the alternative of printing it out, filling it out manually, signing it, and then taking a picture to upload. it’s a real game changer. feedback and discoverability jh: what kind of feedback have you received from users? sa: we have over 90 million active users a month. they give us lots of feedback, and we take that feedback very seriously. every month we go over online reviews, dedicated adobe forums, and support email lists. because we value customer feedback in our product development process, we’re consistently able to deliver a product customers enjoy. here are some comments from our users: app is great, super easy to use and really easy to learn how to use without much of a learning curve, kind of just explains itself as it goes along, a very intuitive app, almost seems as if it's learning you as you learn it, making it extremely functional for even the most novice of users. adobe acrobat mobile is a reliable tool and extremely useful for editing documents efficiently and has a sleek design. i do not know about many others, but i know adobe has always been convenient and easy to use and the editor is such a remarkably helpful tool. i love this! you can sign papers that are sent to you via text, email, and postal mail on your phone and send them back to those who need signed paperwork. it takes two minutes to sign papers and send them back... jh: with all the competition for apps, what has been your strategy for discoverability? sa: we optimize our content on app store pages to make sure people can easily discover the apps’ benefits. we also run campaigns to new potential customers and existing users who have other adobe products but not acrobat mobile. for example, we send campaigns to existing adobe customers to let them know they can download the acrobat mobile app to view and work with documents on their mobile devices. advice and the future jh: what advice would you give developers looking to bring their app to galaxy store? sa: i would say to design the app with scale in mind. whatever changes we make should be architected to scale to other adobe apps going forward. for example, billing was a key component for our partnership with the samsung galaxy store. we modularized it so it could be plug-and-play. other adobe groups have asked to use the billing component for their products with samsung. the samsung partnership helped us think in this way. we can scale our app with other stores without major code rewrites. this led us to think about how to scale for multiple stores, best practices, and notification support. with a more expansive mindset, we decoupled components and came up with a design to create different flavors of the app with the same code. a modular design provides a foundation to build out for other platforms. jh: what other advice would you give for developers in general? sa: keep learning, no matter what your role is in the business. my path was individual contributor to team lead to manager to senior management. never stop learning. set aside time to refresh your skills and keep yourself up to date. jh: do you have plans to make your app compatible with foldable devices? sa: yes. we’ve done a lot of work on foldables, including the samsung z fold and z flip devices. we’re doing rigorous testing to ensure compatibility. jh: what’s next on the horizon for your team? sa: there are more than four billion smartphones today, and they are increasing in emerging markets. while digital documents are ubiquitous in developed countries, we will continue to innovate our products and work with mobile app store partners like samsung so we can expand the value we deliver to customers worldwide. marketing jh: what are some of the ways you promote adobe acrobat mobile? sa: here are our websites and channels: website facebook twitter linkedin youtube blog diversity and inclusion jh: what is adobe doing related to diversity and inclusion? sa: we have several programs that foster diversity and inclusion. adobe for all is a program in which adobe employees with diverse backgrounds share their stories and inspire others. in wesp (women employee shadow program), women shadow execs, and the execs mentor them for three months. our team has a healthy balance of men and women. during the pandemic, we found working remotely and hiring remotely has helped us increase our pool of applicants. we’re excited to see more people from different geos and diverse cultures applying. jh: what do you do for fun outside of work? sa: i’m into freestyle dancing; it gives me a lot of peace and calm. i’ve done aerobics. also, i’ve performed bollywood style and competed in multiple team events, winning twice. i performed with a group of dancers at an adobe talent show, which was fun. i also spend time with my seven-year-old son; he’s in that phase of doing lots of cute and naughty things, which keeps me engaged. jh: it’s been great talking to you shilpi. thanks for this interview. sa: you’re welcome. be sure to also follow us on @samsung_dev to keep up-to-date on the latest developer news, and keep an eye on our blogs for other helpful resources. you can also sign up for the samsung developer program to take advantage of exclusive benefits and access helpful developer resources.
Jeanne Hsu
Develop Health
docmigrating step app to samsung health data sdk background as of july 2025, samsung health sdk for android has been deprecated while existing functionality will continue to operate for now, developers are strongly encouraged to migrate to samsung health data sdk to ensure long-term compatibility and continued support both sdks provide access to health data, which is stored in samsung health app this data may originate directly from the app itself, as is the case for steps, or from connected wearable devices such as the ring, watch or dedicated medical equipment samsung health data sdk offers several advantages over its predecessor more user-friendly api support for more features such as suspend functions cleaner and more compact source code the purpose in this guide, you'll learn how to transition your app from samsung health sdk for android to samsung health data sdk this migration will help future-proof your app and enable you to take full advantage of new capabilities and modern api features offered by samsung health data sdk stepdiary migration overview stepdiary is a sample app originally built using samsung health sdk for android it retrieves the total step count for a specific date and displays detailed step data for that day in this guide, you will learn how to migrate stepdiary to samsung health data sdk, specifically, you will understand the differences between the two sdks update your app’s permissions and data access logic refactor stepdiary to use samsung health data sdk for more information and resources, refer to the samsung health data sdk developer documentation in this guide, we focused exclusively on the minimum required changes needed to migrate the existing app to samsung health data sdk enhancements such as ui design or additional feature upgrades are outside of the scope of this exercise prerequisites set up your environment before you begin the integration, make sure you have the following installed and ready android studio ide java jdk 17 or later an android mobile device compatible with the latest samsung health set up your android device refer to the following resources to set up your android device a turn on the phone’s developer options b run apps on a hardware device download samsung health data sdk visit samsung health data sdk to download samsung health data sdk enable developer mode of samsung health previously, samsung health sdk for android required developers to submit a partner request to gain access, which needed to be applied for and approved before use now, with samsung health data sdk, you can download and use the sdk in developer mode without submitting a partner request to enhance convenience for developers, samsung health data sdk has improved its developer mode functionality if you only need to read data from samsung health app, you can activate developer mode and proceed with development and testing without requiring a partner request for more information on developer mode, please refer to developer mode if you want to test writing data to samsung health app using samsung health data sdk or distribute your app, you need to obtain a partnership for samsung health data sdk you can request it by following this process app migration stepdiary app’s overall structure has been preserved during the migration key components include stepcountreader - handles all data request operations stepdiaryactivity - manages main sdk objects, handling permissions and errors stepcountobserver - serves as a bridge between data changes and the ui it has been extended with an onerror event to notify the activity of any sdk-level exceptions replace the sdk library replace samsung health sdk for android’s aar file in your project navigate to src/main/libs in your project replace samsung-health-data-1 5 1 aar with the new samsung-health-data-api- version aar from the downloaded sdk package add dependencies and kotlin parcelize update your module-level build gradle to have the following dependencies dependencies { //samsung health data sdk implementation files 'src/main/libs/samsung-health-data-api-1 0 0 aar' //gson lib required by the sdk implementation "com google code gson gson 2 13 1" //support for coroutine-based suspend function implementation "androidx activity activity 1 10 1" implementation "androidx lifecycle lifecycle-runtime 2 9 2" //… other existing dependencies } add kotlin-parcelize plugin in your module-level build gradle, add apply plugin 'kotlin-parcelize' note the implementation may vary depending on build script structure update stepdiaryactivity update stepdiaryactivity to inherit from androidx activity componentactivity why this matters componentactivity provides built-in lifecycle awareness which is important for integration with samsung health data sdk this integration enables seamless invocation of suspend functions, enhancing coroutine support connect with samsung health you have now completed the initial setup required to begin using samsung health data sdk to start reading step data from samsung health, you must first establish a connection with samsung health app importing required classes import com samsung android sdk health data healthdataservice import com samsung android sdk health data healthdatastore initialize the healthdatastore the healthdatastore is the main object for accessing health data private val healthdatastore healthdatastore by lazy { healthdataservice getstore this } note the healthdatastore class name is the same as in samsung health sdk for android, but now it provides updated functionality in samsung health data sdk request permissions before your app can read health data from samsung health, you must define necessary permissions in our case, since stepdiary reads step data, we request read-only access define required permission private val permissionkeyset set<permission> = setof permission of datatypes steps, accesstype read check existing permissions before making any data requests, verify whether the user has already granted the necessary permissions val grantedpermissions = healthdatastore getgrantedpermissions permissionkeyset grantedpermissions containsall permissionkeyset if permissions are missing, prompt the user with a permission dialog to grant access healthdatastore requestpermissions permissionkeyset, activity best practice always perform this check during app startup - ideally inside your activity's oncreate method this ensures the app has the required access before attempting any data operations note if permissions are not granted, any data request attempts may result in exceptions due to insufficient access fetch step data create the request now you are going to create a request to read steps from samsung health for a specific time range, grouped in 10-minute intervals use datatype stepstype, which aggregates readings across all connected devices smartphone, watch, etc to avoid duplicates - just like samsung health’s internal calculations this type is similar to stepdailytrend from samsung health sdk for android build the aggregate request val aggregaterequest = datatype stepstype total requestbuilder setlocaltimefilterwithgroup localtimefilter, localtimegroup build set the filters for the request here, we apply two filters localtimefilter - defines start time and end time of steps collection localtimegroup - describes how the steps will be grouped //startdatetime enddatetime will be set to start of the day and end of the day respectively val localtimefilter = localtimefilter of startdatetime, enddatetime // localtimegroup – set up to group steps in 10 minutes ‘buckets’ val localtimegroupunit = localtimegroupunit minutely val multiplier = 10 // for 10-minute grouping val localtimegroup = localtimegroup of localtimegroupunit, multiplier run the request and process results now run the request and iterate through the results to display each 10-minute segment and accumulate total steps for the day runcatching { healthdatastore aggregatedata getaggregaterequest startdatetime } onfailure { observer onerror it as healthdataexception } getornull ? datalist ? map { data -> val stepcount = data value? toint ? 0 val timelabel = data starttime atzone zoneid systemdefault format datetimeformatter ofpattern "hh mm" stepbinningdata timelabel, stepcount } ? let { steplist -> val totalsteps = steplist sumof { it count } observer onchanged totalsteps observer onbinningdatachanged steplist } step-by-step breakdown of the code above make the request to request aggregated step data in a 10-minute interval for a given day startdatetime , call samsung health data sdk’s getaggregaterequest method the method builds the query with the time filters and grouping healthdatastore aggregatedata getaggregaterequest startdatetime handle possible errors runcatching { } onfailure { log e } the runcatching function wraps the call to prevent crashes on failure missing permission, bad request and logs the error get the result list getornull ? datalist? assequence if the call succeeded, datalist contains the aggregated data map each data item map { data -> } for every 10-minute interval, the map function returns extract the number of steps format the start time e g 14 30 create a stepbinningdata timelable, stepcount object update the ui with results let { steplist -> } calculate the total daily steps from the interval entries notify the app using observer to update both the summary and detailed view exception handling robust health apps can recover gracefully when things go sideways when working with samsung health data sdk, key functions such as aggregatedata, requestpermissions, or even getgrantedpermissions may throw exceptions under certain conditions to prevent unexpected crashes or blank screens, it’s best to funnel these exceptions into a central error handler you can do it by wrapping every api invocation with try { // sdk function invocation } catch e healthdataexception { handleexception e } about healthdataexception healthdataexception is the main exception object for samsung health data sdk your handleexception function should show error dialog clear the ui of any outdated step data try to resolve the exception some healthdataexception instances include a resolution intent you can check if the exception has a resolution by checking hasresolution property of the exception object and try to fix it by invoking resolve examples of such exceptions err_old_version_platform indicates that samsung health app is outdated err_platform_not_installed signals that samsung health app isn’t installed at all in both cases, the resolution involves opening the device’s app marketplace, prompting the user to install or update samsung health app once the issue is fixed, control returns to the app so it can continue functioning this approach not only keeps your ui clean but allows for a consistent, guided error experience when something goes wrong, users can see a clear and actionable dialog of what happened and how to fix it include migration completion information in the app manifest please add the following details to the androidmanifest xml file of your app <manifest > <application > <meta-data android name="com samsung android sdk health data migration_completed" android value="true"/> </application> </manifest> run your app once integration is complete, run the app to verify data retrieval and interaction behavior work as expected, matching the previous implementation you can access the full source code of the app, which has been migrated to the samsung health data sdk, here stepdiary-migrated download dec 9, 2025 congratulations! you've successfully migrated your app to use samsung health data sdk now you can build a modern and reliable health app that reads and displays health data directly from samsung health partner request before distributing your app the developer mode of samsung health data sdk is a feature provided solely for development purposes to ensure that an app using samsung health data sdk functions properly without enabling developer mode, you need to submit a partner request through the developer site before distributing your app on app marketplaces after the partner app is approved, the app's detailed information will be registered in samsung's system having a trouble? we are operating a developer support channel on the samsung developer site if you encounter any issue or any question, please visit developer support and submit your query after logging in your samsung account
success story game, mobile, marketplace
blogtoday, we're talking with ed mills, co-founder of hitcents, and alfred nguyen, creative director and producer of forgotton anne for throughline games. hitcents is a full-service video game publisher and developer, focused on bringing to market high-quality, indie-developed titles. founded in 1999 as a software company, hitcents’ passion for games slowly took over and pivoted the company. by 2012, the company was full steam ahead in the gaming industry as a developer and publisher. to date, it has worked with notable and well-recognized brands and celebrities, such as the godfather, nba, tom hanks, adam levine, one direction, and floyd mayweather. one of its most celebrated franchises is draw a stickman, which has been played more than one hundred million times and has global success on the nintendo switch, xbox one, steam, and mobile. tell us about hitcents. ed: hitcents is a full-service video game publisher and developer, but that is not where we started. our journey is part of what makes us such a unique company. hitcents was basically started as a software company on the carpet floors of our home in kentucky when my twins clinton and chris mills were 16-years-old. over the last 20 years our focus has changed, but the core of everything we do is still software. bootstrapped, with no outside investments for 20+ years, gaming has been a key driver of our success for more than a decade. we’ve had success across the gaming spectrum, from pc to console games to mobile apps. our most successful titles are: draw a stickman - the franchise has been played more than 100m+ times. draw a stickman: epic 2 - has seen 18 million purchases and installs across multiple platforms. the godfather: family dynasty - we were the first company to bring don corleone to mobile. currently, we work with a wide range of indie games and developers, and are always open to good gaming content. we publish games created by one-person developer shops, like get to the orange door, a retro futuristic rogue-lite fps releasing in 2020, to games created in other countries that have more of an edge and statement, like the cinematic platformer ministry of broadcast, which also launched in early 2020 and deals with concepts such as big brother, fake tv and a satirical look at politics, plus many more. can you share how you started as a game developer and ultimately became a game publisher? ed: it’s kind of crazy how we got started in games. hitcents was more of a complex ecommerce web agency and our creative director had an idea to draw a stickman and bring it to life on a browser. the weekend we launched draw a stickman we had millions of visitors, which ended up crashing our servers for all our clients. needless to say, it seemed tragic at the time, but the brand draw a stickman emerged as a successful, long-standing ip for hitcents. the brand has won 5 webby awards and made both hollywood and the game industry take note of us. as a result, a-list clients started to come on board with new content and connections, bringing us early success in games. this led to our partnering with caa for ip-related games. hitcents has many popular titles. we want to focus on forgotton anne. can you tell us about this game, available now on galaxy store? ed: forgotton anne is a seamless cinematic adventure with meaningful storytelling and a light puzzle platform. you play anne, the enforcer, who keeps order in the forgotten lands as she sets out to squash a rebellion that might prevent her master, bonku, and herself from returning to the human world. in the game, you step into a hand-animated realm of wonder in which everyday objects take on a life of their own. imagine a place where all that is lost and forgotten goes -- old toys, letters, socks. forgotten lands is this magical world inhabited by forgotlings; living mislaid objects longing to be remembered. in my opinion, and i’m sure the readers will think i’m biased, but the opening sequence in forgotton anne is so much fun to watch. i now know where all my lost socks go. forgotton anne has a stunning visual style and interactive game experience. what systems do you use to create game concepts and story characters? alfred: to create anne and forgotten lands, our artists use adobe products, as well as clip studio paint and tv paint to design, paint, and animate most of the sprites you see in the game, as well as the detailed environmental assets. with the protagonist anne alone more than 5000 frames were drawn! for story overview and testing, we used a lot of documents, spreadsheets, and a free software called twine that is great to test branching dialogues. how important is user experience when designing your games? alfred: the user experience is very important when designing a game. it is always a delicate balance between taking the player into consideration and staying true to a specific intention. knowing that sometimes a player might not immediately like a specific design, even though it adds a dimension that contributes positively to the game experience as a whole. this was the case when it came to prioritizing fluid animation over some degree of the controls’ responsiveness, or when we decided not to include game over, as it would negatively affect the pacing of the game. forgotton anne features light puzzles and platforming sections. however, it is very much a story about anne and letting the player make choices in her stead, to see how the consequences play out. how will the player use anne’s authority and deal with conflicts? alfred: when designing we let storytelling and emotions come first. then we discuss how we can make things the most intuitive for the largest target audience. however, as developers we have to accept that different players like different things. in the end, we are just happy that as many people as possible love the game! what are some of the challenges you face while developing your games? alfred: one challenge was to create a seamless cinematic experience where the player doesn’t feel a traditional cut between storytelling cutscenes and gameplay. the way we managed this was to ensure that there were no loading screens while playing and that all cutscenes were rendered in-game so the player was not presented with a different aesthetic when a longer story scene played out. the whole game is voice-acted and we created a ‘talk animation system’ to make it feel like the words were acted out. this really adds to the immersion. artwise we aimed for an incredibly rich and detailed painted environment. this presented its own challenge, as we had to make sure the player could discern how to navigate the 2.5d world, allowing for some travel in the z-depth axis at certain intersections. which objects would the player be able to interact with or bump into and which were decorative elements? something that sounds very trivial, like walking up and down stairs, was actually also a challenge as we wanted anne to feel real with her animations, unlike many other 2d games. if you pay attention, you will notice her feet place themselves correctly on the steps, as do her hands when she is climbing ladders. the tone of the game was also a challenge we wanted to get right. the premise of the game is very outlandish and quirky, with echoes of fairy tales like beauty and the beast, but at the same time we wanted to create a very realistic world. we were trying to strike a tone that could easily go from emotional and serious when dealing with themes of consumerism and authoritarianism to funny and endearing using the diverse cast of forgotling characters. are there common errors made by developers while programming games? alfred: scoping a game is always really hard. in early development you tend to be overambitious, and rightly so, as you need to explore the best version possible of the game you are making. however, it is important to constantly update plans and make the necessary cuts when necessary, as most developers don’t have the luxury of working without deadlines. these cuts tend to be a good thing, as it sharpens the concept and forces the developer to prioritize what is really important to the game and player’s experience, instead of falling into the typical pitfall of feature-creeping, i.e. adding features to the game due to the worry that it is not fun enough for players. forgotton anne boasts a number of awards. what is the basic structure for developing a successful game? ed: we don’t think there is a secret formula to creating hit games, or the market would be flooded with them. but, there are some universal truths one can rely on for added probability. one of them is knowing your intentions and having a capable team that has the necessary competences to execute. communication is key, as it does not matter how skilled each individual is on the team if there is a lack of understanding between the people. i also strongly believe in an organic approach to development, where you need to accept changing circumstances and adapt quickly to them. we rarely set out knowing exactly every little detail of the finished game. if we did, it would prove to be detrimental to the creative process, as half the fun is coming up with solutions and discovering great ideas over the course of realizing the initial vision. while iterating on gameplay mechanics, we might discover a great opportunity to emphasize a storytelling aspect, or perhaps a piece of composed music could inspire how a sequence could play out. there is still so much to explore with the medium of games and its storytelling potential. that is really our aim and we hope that it translates to some originality that resonates with players. how do you stay up to date with the latest game and software trends? ed: there are a couple of ways. every major platform on mobile and console has a developer conference and these shows offer the best avenue to listen and learn. another popular option is to go with an established publisher that often has early access to beta programs and has boots on the ground looking for the latest changes and opportunities to use tools that make a better product and potentially make work quicker. as a publisher, we are always playing and researching as many games as we can; reading up on trends in the industry -- who’s hot, what’s not; and researching new technologies and marketing techniques. what advice do you have for indie developers attempting to develop a successful game business? ed: start with a team, even if it's just 2 people. to make a game it requires many skill sets. i like to see experts, or someone that desires to be an expert, at each position or task. for example, you can have one team member specializing in art design plus knowledge of ui (user interface) and ux (user experience), who can complement a programmer. the more well-rounded each team member is the more fun the project and the less time wasted searching for answers to complex development problems. create a gdd (game design document) that maps out the major aspects of the game. this will save countless hours of unneeded art and programming. it's ok to iterate upon your gdd, but do start with a solid foundation. choose the best language/engine to make your game. though unity is great for 3d games and can port over to android with relative ease, sometimes it can lose the true feel of doing the code in its native environment if you are producing a 2d game or an app. the best advice i can give is to find a team member with the skill set that complements your game or app idea. if you are a programmer, stay with what you know and get better at it. decide what your time commitment is to making your game, i.e. months? years? paid games are easier to go to market than free-to-try, but free-to-try will get you more downloads over time. this question can be a blog all on its own, so again having a good publisher can help more than almost anything. with all of your current success, what is next for hitcents? ed: the godfather:family dynasty game has become over the past 3 years one of, if not the most, successful mobile paramount game. hitcents is planning the next big game with a known brand on par to the success and magnitude of the godfather. the biggest thing for our future is knowing the words cross platform means playing across your mobile device, pc, and console, not just across mobile platforms. our future is about consumer choice, bringing all the options to our players and letting them choose what they want to play, where they want to play it, and what device they want to play it on. ideally, your samsung galaxy phone can play and progress while you are on the go, and then you can pick up on your console at home where you left off. it's an exciting time for gamers! what motivated hitcents to bring your games to galaxy store? ed: galaxy store provides hitcents with the opportunity to diversify our sales, by opening a new revenue stream. it allows us to widen our customer base and gain access to samsung device owners globally. what samsung developer program services did you take advantage of when publishing forgotton anne to galaxy store? ed: we integrated samsung in-app purchase payment service, which is used to make a one-off payment for goods or to pay for a regular subscription. it allows hitcents to sell premium content and virtual goods, including in-game items available for purchase during game play. did you use any marketing services to support driving both awareness and downloads for your game on galaxy store? ed: marketing and monetization is another key component of every developer’s journey. we found the galaxy store badge can be used as a resource on our website and media to support marketing our game on galaxy store. adding galaxy store badge has put users one click away from downloading our game on galaxy store. the guides and downloadable content provided easy-to-follow instructions. thanks to ed mills and alfred nguyen for sharing how they create and distribute successful game titles. follow us on twitter @samsung_dev for more developer interviews and tips for building games, apps, and more for the galaxy store.
Connect Samsung Developer Conference
webtech square products and services using our new technology are displayed in the space by each field, and you can find details in the keynote speech and sessions. ai for platforms enterprise & ecosystem ai for devices category ai for platforms enterprise & ecosystem ai for devices mobile remote on smartthings control your tv effortlessly with our innovative mobile remote. 1. personalize your mobile remote to match your needs. arrange your mobile remote with the buttons and applications you want. you can use the touchpad to control without looking at the mobile screen (swipe-navigation, tap-ok, double tap-return). 2. use the mobile remote even without the internet. the mobile remote connects to your tv via ble for seamless interaction. 3. share the mobile remote with your family. simply scan a qr code to share the mobile remote with family members. innovating together for 10 years samsung smartthings has been leading the way in connected living for a decade — consistently redefining home automation and setting the standard for efficiency and security. growing from 100 million subscribers in 2019 to over 350 million by august 2024, smartthings has established samsung as a leader in the smart home market. the platform continues to expand its influence in the iot industry by enhancing its ai-driven capabilities and even extending its reach into the b2b space. check out the infographic below to explore samsung smartthings' 10-year journey of innovation. easily certify your product family the smartthings platform supports connectivity with a wide range of partner devices to enhance convenience in users' daily lives. to achieve this goal, we have introduced a program called ‘certification by similarity'. this program allows free certification for derivative products that share the same features as the main certified product based solely on self-verification test results. it also enables mass certification and registration of entire product lines at once. smartthings is planning various promotions to introduce wwst-certified partner devices to general users. tailored moods with music sync with smartthings music sync, you can match lighting to your gaming environment or favorite movie scenes, and when it comes to home parties, relaxation, or even workouts, smartthings music sync offers music synchronization to create an engaging listening experience. smartthings hubs working together as a team smartthings hubs are already integrated into millions of samsung devices. these hubs build a multi-hub network and can fully cover your home without any dead spots. samsung knox matrix knox matrix realizes samsung's vision for a future where connected devices can protect each other within an ecosystem. it is set to provide the devices within a user's ecosystem with fewer vulnerabilities through strong, diverse security practices. take care of your loved ones with family care take care of your loved ones with smartthings. no matter the distance, you can now easily check in to make sure they are ok. experience navien house with smartthings navien monitors consumer hot water and heating usage patterns, analyzes the data, and generates a home report. by collaborating with smartthings, navien strives to offer global consumers more opportunities to experience the excellence of navien products. conserve water for a better future we're thrilled introduce a new partner to the smartthings ecosystem. join us at sdc to learn all the details about this exciting partnership! home insight powered by smartthings ai a message that helps with your daily life, home insight. smartthings intuitively summarizes the essential details of your home and intelligently fine-tunes your needs with your living environment. door locks on smartthings x samsung wallet a keyless experience with samsung wallet and smartthings. samsung wallet and smartthings' partners can display their own brand on a digital home key. in smartthings, you can manage users who have access to your door lock and utilize safe and various ways of opening the door. also, you can grant personalized experiences based on who unlocks the door. convenient remote control experience you can easily find and quickly control your devices with the larger remote control cards in the smartthings application. work from home in comfort by adjusting the temperature right from your galaxy book. create the best mood lighting for movie night by dimming the lights from your tv's quick launch. simply tap the device icon in map view and the remote appears on your smartphone or tablet. no need to switch screens or be close to the device anymore. daily health care in the comfort of your home make daily health management at home effortless for you and your loved ones. now samsung health is integrated with smartthings which is connected to millions of devices, opening the possibilities of new experiences in home environments. back to previous page samsung health sdk suite unlock the future of health tech. explore the samsung health sdk suite today! empowering health innovation with samsung's suite of health sdks, enabling seamless integration of advanced digital health solutions into your applications and devices. partner with samsung health transforming lives together. improve health and well-being through innovation, research, and collaboration to empower people throughout their lives. samsung wallet: expanding eco with partners samsung wallet is expanding its offerings by providing new card types and features. it also allows easy onboarding of multiple merchants through the improved partner site and can send push notifications to users directly. the existing samsung wallet/pay partner site has been integrated with the developer portal, resulting in enhanced usability and added functionality. this integration is expected to provide a more convenient experience for partners. samsung wallet: digital key for home and office no need to carry a key. tap to unlock your door with the digital key of samsung wallet. samsung wallet: sdk for online id verification add your mobile driver's license or state id to samsung wallet and easily verify your identity online. car rental, liquor purchase, loan applications, and more require proof of identity. experience the convenience and security when you present your state-issued credential with samsung wallet. galaxy for knowledge workers introduction of enterprise mobility solutions enabled with strategic partners to deliver maximum business productivity via samsung flagship devices and samsung multi-device connectivity environment. galaxy for frontline workers this session introduces three enterprise partner solutions for field workers. we are going to showcase how galaxy devices are transformed into optimized solutions through partner collaboration. first, koamtac advanced inventory management solution. second, targus field ready case and mpos solution. third, harman's worker safety and productivity solution for galaxy watch. samsung vxt : cms platform with pirs (pre-integrated repeatable solution) traditionally, the signage industry was centered around hardware, but with vxt, we've taken a leap towards becoming a software solution. starting with saas, we're now progressing towards daas and paas, ensuring high growth and market dominance based on revenue generated from the vxt platform ecosystem. our cutting-edge cms software, vxt cms, incorporates ai technology to provide comprehensive support for all aspects of content production, operation, and management. by utilizing an ai-powered chatbot, we enable efficient operations and management. to further enhance our offering, we are actively seeking partnerships with ai experts through the pirs application. by providing easy access to development tools such as sdks, we encourage more ai companies to join us in shaping this new ecosystem. our goal is to create an application environment where si partners can develop specialized features that seamlessly integrate with samsung vxt. harman ignite store – a white-label aaos app store the harman ignite store is an integrated automotive app store built on the android automotive operating system (aaos). learn how harman automotive is connecting developers with carmakers to create unique in-vehicle digital experiences that can be monetized. back to previous page samsung ai cast: delivering ai-generated experiences to your screen samsung ai cast brings the power of ai directly to your screen, delivering immersive experiences right to your display. it showcases stunning ai-generated images, elegantly framed like artwork. it offers personalized content recommendations. it shares text from your conversations with ai. whether it's a visual creation, a custom content suggestion, or any insightful text, ai cast ensures that the best of ai is always on display, making your screen experience richer and more interactive. expansion of sign language guide the sign language guide, initially designed for tv settings (2022), has now been extended to cover a wider range of tv built-in services. this innovative feature enables individuals who are deaf to easily access information displayed on their tvs. in collaboration with broadcasting companies, we are incorporating sign language information into real-time broadcasts and outputting them on tv. we are also preparing to expand the use of sign language in various areas such as the out-of-box experience (oobe), notifications, and electronic manuals containing tv usage information. with advancements in technology, it is expected that live streaming videos will soon be able to be translated into sign language in real-time using an ai-powered motion capture technique. by expanding the motion dictionary within the tv, a broader variety of sign language motions can be stored and utilized effectively. ai picture quality the ai picture quality of samsung tv focuses on ai object-oriented picture quality enhancement. ai upscaling pro can improve face quality through object-oriented upscaling technology based on ai face detection and face-specific upscaling model. ai motion enhancer pro can improve motion picture quality of cognitively important objects (ball/text) by recognizing the type of sports and detecting the movement of important objects. samsung daily+ and daily board ecosystem samsung presents a lifestyle content platform, samsung daily+ and daily board. here, we invite you to easily join the samsung daily+ and daily board ecosystem. samsung daily+ is an on-screen experience platform that suggests users explore diverse lifestyle content across various experience categories. a new daily board sdk provides an easier way to include widgets on the daily board screen, providing frequently displayed off-screen experiences. samsung ai tv on risc-v an initial step to expand ai screen towards risc-v. ai screen on tizen is now powered by risc-v-based computing platforms. by harnessing the flexibility and openness of risc-v and tizen, samsung will enhance user experience by holistically optimizing entire hardware and software stacks. hassle-free adoption of tizen applications. you can still enjoy all existing web and .net applications without any modification. tizen will provide all environments (e.g., toolchain, sdk, etc.) to easily migrate native applications for risc-v. generative wallpaper generative wallpaper serves the experience of providing large images reflecting preferences using a generative ai model. it enriches the home atmosphere with high-quality generated images, making every moment shared with family and friends even more special. it offers more than 18 styles tailored to customers' tastes and provides high-resolution images suitable for a large screen. enhancing search experience with bixby search is the most basic but important thing nowadays. there are so many movies and shows on many different ott platforms. how can we find the exact one that we want to see without knowing the exact title? with this upgraded search system, you can now find the movie with a somewhat ambiguous sentence or some part of the plot. like "find me a movie about a mouse inside a cook's hat." (what movie did you expect?) or you can find the movie by a genre or time period, like "find a movie about the financial crisis," or "find a movie about the korean war." not only enhanced search power, but now bixby can also do more things at once. you can have a conversation with bixby with context, like this: "who's the director of parasite?" "the director of parasite is bong joon-ho." "find his movies." and you can do many things with only one sentence: "hi bixby, turn the volume to 10 and find action movies." you don't have to wait and say one command at a time and wait for bixby's 'completed' signal. ecosystem for advanced professional video codec advanced professional video (apv) codec is a new video codec for prosumers who do not want to compromise on quality while enjoying the convenience of capturing video using smartphones. at our booth, you can experience the superior visual quality of the apv codec and a video editing demonstration supported by the apv codec. on-device cleaning solution samsung's home appliances are equipped with on-device ai, making them smarter than ever before. with various sensors and cameras, they offer an enhanced user experience by optimizing cleaning paths and recognizing different objects. additionally, these appliances identify carpeted areas and floor types to adjust their cleaning performance accordingly. explore more of the on-device features available in samsung's home appliances for a truly innovative experience. new ai familyhub the family hub refrigerator is equipped with ai vision technology, allowing you to manage your food efficiently by always knowing what's inside. additionally, you can personalize your family hub experience with generative wallpaper, which enables users to create their own unique wallpapers for the device. now it's time to try generating the desired wallpaper and enhance your family hub experience. enhanced appliance control : bixby & ai home on-device automatic speech recognition (asr) technology enables appliances to support voice interactions without requiring voice activation commands. this technology allows for a more natural and intuitive way to interact with our products, ultimately enhancing user experience. additionally, bixby's advancements facilitate seamless communication between appliances and users, resulting in improved convenience and usability. the incorporation of these technologies into home appliances showcases their potential to revolutionize the way we interact with everyday objects. back to previous page mobile remote on smartthings control your tv effortlessly with our innovative mobile remote. 1. personalize your mobile remote to match your needs. arrange your mobile remote with the buttons and applications you want. you can use the touchpad to control without looking at the mobile screen (swipe-navigation, tap-ok, double tap-return). 2. use the mobile remote even without the internet. the mobile remote connects to your tv via ble for seamless interaction. 3. share the mobile remote with your family. simply scan a qr code to share the mobile remote with family members. innovating together for 10 years samsung smartthings has been leading the way in connected living for a decade — consistently redefining home automation and setting the standard for efficiency and security. growing from 100 million subscribers in 2019 to over 350 million by august 2024, smartthings has established samsung as a leader in the smart home market. the platform continues to expand its influence in the iot industry by enhancing its ai-driven capabilities and even extending its reach into the b2b space. check out the infographic below to explore samsung smartthings' 10-year journey of innovation. easily certify your product family the smartthings platform supports connectivity with a wide range of partner devices to enhance convenience in users' daily lives. to achieve this goal, we have introduced a program called ‘certification by similarity'. this program allows free certification for derivative products that share the same features as the main certified product based solely on self-verification test results. it also enables mass certification and registration of entire product lines at once. smartthings is planning various promotions to introduce wwst-certified partner devices to general users. tailored moods with music sync with smartthings music sync, you can match lighting to your gaming environment or favorite movie scenes, and when it comes to home parties, relaxation, or even workouts, smartthings music sync offers music synchronization to create an engaging listening experience. smartthings hubs working together as a team smartthings hubs are already integrated into millions of samsung devices. these hubs build a multi-hub network and can fully cover your home without any dead spots. samsung knox matrix knox matrix realizes samsung's vision for a future where connected devices can protect each other within an ecosystem. it is set to provide the devices within a user's ecosystem with fewer vulnerabilities through strong, diverse security practices. take care of your loved ones with family care take care of your loved ones with smartthings. no matter the distance, you can now easily check in to make sure they are ok. experience navien house with smartthings navien monitors consumer hot water and heating usage patterns, analyzes the data, and generates a home report. by collaborating with smartthings, navien strives to offer global consumers more opportunities to experience the excellence of navien products. conserve water for a better future we're thrilled introduce a new partner to the smartthings ecosystem. join us at sdc to learn all the details about this exciting partnership! home insight powered by smartthings ai a message that helps with your daily life, home insight. smartthings intuitively summarizes the essential details of your home and intelligently fine-tunes your needs with your living environment. door locks on smartthings x samsung wallet a keyless experience with samsung wallet and smartthings. samsung wallet and smartthings' partners can display their own brand on a digital home key. in smartthings, you can manage users who have access to your door lock and utilize safe and various ways of opening the door. also, you can grant personalized experiences based on who unlocks the door. convenient remote control experience you can easily find and quickly control your devices with the larger remote control cards in the smartthings application. work from home in comfort by adjusting the temperature right from your galaxy book. create the best mood lighting for movie night by dimming the lights from your tv's quick launch. simply tap the device icon in map view and the remote appears on your smartphone or tablet. no need to switch screens or be close to the device anymore. daily health care in the comfort of your home make daily health management at home effortless for you and your loved ones. now samsung health is integrated with smartthings which is connected to millions of devices, opening the possibilities of new experiences in home environments. samsung health sdk suite unlock the future of health tech. explore the samsung health sdk suite today! empowering health innovation with samsung's suite of health sdks, enabling seamless integration of advanced digital health solutions into your applications and devices. partner with samsung health transforming lives together. improve health and well-being through innovation, research, and collaboration to empower people throughout their lives. samsung wallet: expanding eco with partners samsung wallet is expanding its offerings by providing new card types and features. it also allows easy onboarding of multiple merchants through the improved partner site and can send push notifications to users directly. the existing samsung wallet/pay partner site has been integrated with the developer portal, resulting in enhanced usability and added functionality. this integration is expected to provide a more convenient experience for partners. samsung wallet: digital key for home and office no need to carry a key. tap to unlock your door with the digital key of samsung wallet. samsung wallet: sdk for online id verification add your mobile driver's license or state id to samsung wallet and easily verify your identity online. car rental, liquor purchase, loan applications, and more require proof of identity. experience the convenience and security when you present your state-issued credential with samsung wallet. galaxy for knowledge workers introduction of enterprise mobility solutions enabled with strategic partners to deliver maximum business productivity via samsung flagship devices and samsung multi-device connectivity environment. galaxy for frontline workers this session introduces three enterprise partner solutions for field workers. we are going to showcase how galaxy devices are transformed into optimized solutions through partner collaboration. first, koamtac advanced inventory management solution. second, targus field ready case and mpos solution. third, harman's worker safety and productivity solution for galaxy watch. samsung vxt : cms platform with pirs (pre-integrated repeatable solution) traditionally, the signage industry was centered around hardware, but with vxt, we've taken a leap towards becoming a software solution. starting with saas, we're now progressing towards daas and paas, ensuring high growth and market dominance based on revenue generated from the vxt platform ecosystem. our cutting-edge cms software, vxt cms, incorporates ai technology to provide comprehensive support for all aspects of content production, operation, and management. by utilizing an ai-powered chatbot, we enable efficient operations and management. to further enhance our offering, we are actively seeking partnerships with ai experts through the pirs application. by providing easy access to development tools such as sdks, we encourage more ai companies to join us in shaping this new ecosystem. our goal is to create an application environment where si partners can develop specialized features that seamlessly integrate with samsung vxt. harman ignite store – a white-label aaos app store the harman ignite store is an integrated automotive app store built on the android automotive operating system (aaos). learn how harman automotive is connecting developers with carmakers to create unique in-vehicle digital experiences that can be monetized. samsung ai cast: delivering ai-generated experiences to your screen samsung ai cast brings the power of ai directly to your screen, delivering immersive experiences right to your display. it showcases stunning ai-generated images, elegantly framed like artwork. it offers personalized content recommendations and shares text from your conversations with ai. whether it's a visual creation, a custom content suggestion, or any insightful text, ai cast ensures that the best of ai is always on display, making your screen experience richer and more interactive. expansion of sign language guide the sign language guide, initially designed for tv settings (2022), has now been extended to cover a wider range of tv built-in services. this innovative feature enables individuals who are deaf to easily access information displayed on their tvs. in collaboration with broadcasting companies, we are incorporating sign language information into real-time broadcasts and outputting them on tv. we are also preparing to expand the use of sign language in various areas such as the out-of-box experience (oobe), notifications, and electronic manuals containing tv usage information. with advancements in technology, it is expected that live streaming videos will soon be able to be translated into sign language in real-time using an ai-powered motion capture technique. by expanding the motion dictionary within the tv, a broader variety of sign language motions can be stored and utilized effectively. ai picture quality the ai picture quality of samsung tv focuses on ai object-oriented picture quality enhancement. ai upscaling pro can improve face quality through object-oriented upscaling technology based on ai face detection and face-specific upscaling model. ai motion enhancer pro can improve motion picture quality of cognitively important objects (ball/text) by recognizing the type of sports and detecting the movement of important objects. samsung daily+ and daily board ecosystem samsung presents a lifestyle content platform, samsung daily+ and daily board. here, we invite you to easily join the samsung daily+ and daily board ecosystem. samsung daily+ is an on-screen experience platform that suggests users explore diverse lifestyle content across various experience categories. a new daily board sdk provides an easier way to include widgets on the daily board screen, providing frequently displayed off-screen experiences. samsung ai tv on risc-v an initial step to expand ai screen towards risc-v. ai screen on tizen is now powered by risc-v-based computing platforms. by harnessing the flexibility and openness of risc-v and tizen, samsung will enhance user experience by holistically optimizing entire hardware and software stacks. hassle-free adoption of tizen applications. you can still enjoy all existing web and .net applications without any modification. tizen will provide all environments (e.g., toolchain, sdk, etc.) to easily migrate native applications for risc-v. generative wallpaper generative wallpaper serves the experience of providing large images reflecting preferences using a generative ai model. it enriches the home atmosphere with high-quality generated images, making every moment shared with family and friends even more special. it offers more than 18 styles tailored to customers' tastes and provides high-resolution images suitable for a large screen. enhancing search experience with bixby search is the most basic but important thing nowadays. there are so many movies and shows on many different ott platforms. how can we find the exact one that we want to see without knowing the exact title? with this upgraded search system, you can now find the movie with a somewhat ambiguous sentence or some part of the plot. like "find me a movie about a mouse inside a cook's hat." (what movie did you expect?) or you can find the movie by a genre or time period, like "find a movie about the financial crisis," or "find a movie about the korean war." not only enhanced search power, but now bixby can also do more things at once. you can have a conversation with bixby with context, like this: "who's the director of parasite?" "the director of parasite is bong joon-ho." "find his movies." and you can do many things with only one sentence: "hi bixby, turn the volume to 10 and find action movies." you don't have to wait and say one command at a time and wait for bixby's 'completed' signal. ecosystem for advanced professional video codec advanced professional video (apv) codec is a new video codec for prosumers who do not want to compromise on quality while enjoying the convenience of capturing video using smartphones. at our booth, you can experience the superior visual quality of the apv codec and a video editing demonstration supported by the apv codec. on-device cleaning solution samsung's home appliances are equipped with on-device ai, making them smarter than ever before. with various sensors and cameras, they offer an enhanced user experience by optimizing cleaning paths and recognizing different objects. additionally, these appliances identify carpeted areas and floor types to adjust their cleaning performance accordingly. explore more of the on-device features available in samsung's home appliances for a truly innovative experience. new ai familyhub the family hub refrigerator is equipped with ai vision technology, allowing you to manage your food efficiently by always knowing what's inside. additionally, you can personalize your family hub experience with generative wallpaper, which enables users to create their own unique wallpapers for the device. now it's time to try generating the desired wallpaper and enhance your family hub experience. enhanced appliance control : bixby & ai home on-device automatic speech recognition (asr) technology enables appliances to support voice interactions without requiring voice activation commands. this technology allows for a more natural and intuitive way to interact with our products, ultimately enhancing user experience. additionally, bixby's advancements facilitate seamless communication between appliances and users, resulting in improved convenience and usability. the incorporation of these technologies into home appliances showcases their potential to revolutionize the way we interact with everyday objects.
SDP DevOps
docsamsung developers terms and conditions please read all of the following terms and conditions carefully these general terms and conditions shall govern the use by you of the samsung developers website developer samsung com and together shall constitute an agreement between you and samsung electronics co ltd "samsung" the terms of the privacy policy are incorporated into these terms and conditions by reference if you have any questions about the terms and conditions, or do not agree to them, then please email us at support@samsungdevelopers com com, before using the website samsung may change these terms and conditions or its privacy policy at any time by updating this page you shall therefore check this page from time to time to review these terms and conditions to ensure that you agree with any changes using or accessing this website indicates your continuing acceptance of any updates to the terms and conditions if you do not accept the terms and conditions, then please do not continue to use the website download information about samsung developers samsung is a company existing under the laws of the republic of korea, with its place of business at samsung-ro 129, yeongtong-gu, suwon-city, gyeonggi-do, korea 16677 access to the website and samsung intellectual property rights this website allows you to use the contents contained within it for your own use and benefit samsung shall have the right to modify, withdraw or deny access to the website at any time, including introducing charges for its use or other restrictions on access the website and all the materials contained within it are protected by intellectual property rights including copyright, trademarks, patents, design rights, database rights, and rights in confidential information , and, as such, they either belong to samsung or are licensed to samsung to use the materials include, but are not limited to, the design, layout, logos, brands, look, appearance and graphics of the website, plus content such as software, documents and other materials which appear on it you may not copy, redistribute, republish or otherwise make the materials on the website available to anyone else for a commercial purpose without consent of samsung in writing you may only print or download materials from the website for your own personal, non-commercial use, provided that no materials are modified in any way no graphics are used separately from accompanying text copyright and trademark notices appear in all copies, and you acknowledge this website as the source of the materials and the people to whom you provide these materials are made aware of these restrictions notwithstanding the foregoing, specific license terms for materials on the website may allow broader rights of use, subject to such terms nothing in these terms and conditions grants any license to use any samsung brand [however, you may be entitled to use the developer samsung com logo in accordance with our published guidance from time to time ] samsung goods and services samsung may display the availability of some goods and/or services on this website some of these goods and/or services may only be available in certain jurisdictions and samsung therefore reserves the right to choose where such goods and/or services are supplied by informing the availability of any goods and/or services, samsung does not warrant that such goods and/or services will be available in your jurisdiction and you should check with your local samsung contact for further information where samsung does supply goods and/or services, whether through this website or other means, additional terms and conditions may apply remote test lab remote test lab is service where a qualifying user can conduct testing of software applications suitability or compatibility for certain samsung devices through the website the availability and nature of the devices that samsung makes available in connection with the remote test lab service shall be posted on the website and updated from time to time however, samsung does not guarantee that any specific device will be available at any particular time and users should check the website from time to time to see what devices are in fact available remote test lab uses actual devices, but may not replicate exact operation conditions production models may vary from devices made available through the remote test lab service and therefore users are advised to test applications on production models as well as through remote test lab remote test lab service is only available to you if you are a qualified, registered user of developer samsung com, but you may be restricted from using service without notice when trying prohibited behaviors such as, without limitation, locking device with pin number or pattern or using the remote test lab service to gain an unfair winning advantage over other participants in any events for samsung devices you will only have access to the service for a specific defined period of time which varies depending on the test device once the defined period of time has elapsed, access to remote test lab will cease and you should make sure that all your test or other data in connection with remote test lab is properly saved by using remote test lab, you agree and acknowledge that samsung is not liable for any loss of data or software in connection with your access to the service, and that, prior to the release of any application or device into manufacture, further tests will need to be conducted in recognition of the fact that remote test lab is not a substitute for any such required tests by using remote test lab, you warrant that you agree and ackowledge that the service is designed for testing applications on samsung devices and the test results do not guarantee the use of applications on other devices you will only use the service for testing of applications which are designed solely for use on samsung devices you will uninstall any and all software or other content which has been used in connection with the service once you have completed your session you shall not attempt to copy, reverse engineer or decompile the remote test lab device or any technology connected with it software downloads when we make software available for users to download through developer samsung com, any such download is subject to the terms of our end user license agreement, in addition to these terms and conditions we may also wish to specify certain additional licensing terms in connection with specific software and, if any such additional software licensing terms apply, these will be notified to you at the time you agree to license the software sample code samsung may publish on the website what samsung terms "sample code", which is software developed by samsung and which samsung makes freely available for developers to use under the terms of the sample code license the terms of the sample code license will be notified to you at the time you agree to license any sample code from samsung uploading material to the forum website any material you upload to developer samsung com will be considered non-confidential and non-proprietary, and we have the right at no charge to use, copy, distribute, sub-license and disclose to third parties any such material for any purpose we also have the right to disclose your identity to any third party who makes reasonable claims that any material posted or uploaded by you to the website constitutes a violation of their intellectual property rights, or of their right to privacy samsung reserves the right to remove any material or posting you make on the website if, in its opinion, such material does not comply with samsung's content standards you warrant that any material you upload does not, and will not, infringe any third party intellectual property rights forum the members of developer samsung com are entitled to participate in the forum and blogs that are in operation on the website the rules laid out below apply to anyone participating in the forum, blogging or other interaction with the website forum rules any submission of material by you to the forum means that you accept, and agree to abide by, all the terms and conditions of below forum rules, which supplement the general website terms and conditions and privacy policy moderation the company is under no obligation to you or any other person to oversee, monitor or moderate the forum or any other services samsung provides on the website and samsung may therefore stop moderating the forum at any time samsung reserves the right to remove, or to disable access to, any posted contribution which samsung deems to be potentially defamatory of any person, or otherwise inappropriate, or which samsung deems unlawful or in violation of any third party rights samsung expressly excludes liability for any loss or damage arising from the use of developer samsung com by any person in contravention of these rules submission of contributions there is no limit to the length of a contribution please note that your contribution will not be anonymous before making a contribution, you must register with samsung developers your id, name, profile image and your activity history such as the number of posts, joining date, badges you earned and so on, will appear as part of your published contribution content standards the content standards below must be complied with in spirit as well as to the letter we will determine, at our discretion, whether a contribution breaches the content standards a contribution must be accurate where it states facts , be genuinely held where it states opinions , comply with all -the applicable laws applicable in the country from which it is posted, and be relevant a contribution must not be defamatory of any person be obscene, offensive, hateful or inflammatory promote discrimination based on race, sex, religion, nationality, disability, sexual orientation or age disclose the name, address, telephone, mobile or fax number, e-mail address or any other personal data in respect of any individual infringe any copyright, database right or trademark of any other person breach any legal duty owed to a third party, such as a contractual duty or a duty of confidence be in contempt of court be likely to harass, upset, embarrass, alarm or annoy any other person impersonate any person, or misrepresent your identity or affiliation with any person give the impression that the contribution emanates from samsung if this is not the case advocate, promote, or incite any third party to commit, or assist, any unlawful or criminal act contain a statement which you know or believe, or have reasonable grounds for believing, that members of the public for whom the statement is intended are likely to understand as a direct or indirect encouragement or other inducement to the commission, preparation or instigation of acts of terrorism contain any advertising or promote any services or web links to other sites license by submitting a contribution to developer samsung com, you agree to grant samsung, and any other company or corporation within the samsung group, a non-exclusive license to use that contribution although you will still own the copyright to your contribution, we will have the right to freely use, edit, alter, reproduce, publish and/or distribute the material contained in your contribution this license will be free of charge, perpetual and capable of sub-license we may exercise all copyright and publicity rights in the material contained in your contribution, in all jurisdictions, to their full extent, and for the full period for which any such rights exist in that material by submitting your contribution to dveloper samsung com, you are warranting that you have the right to grant samsung the non-exclusive license described above and that it does not infringe any third party rights including third party intellectual property rights if you are not in a position to developer samsung com, please do not submit the contribution to developer samsung com breach of these rules when we determine that a breach of the content standards has occurred or you have otherwise breached these forum rules, we may at our discretion take such action as we deem appropriate, including, without limitation, withdrawal of your right to use this website, removal of any contributions already posted on the website, and/or other legal action we exclude our liability for all action we may take in response to breaches of these forum rules complaints if you wish to complain about any contribution posted on any category in the forum, please contact us at support@samsungdevelopers com we will then review the contribution and decide whether it complies with our content standards we will deal with any contribution which, in our opinion, breaches the standards see above we will inform you of the outcome of our review within a reasonable time of receiving your complaint changes to forum rules samsung may revise the forum rules at any time please therefore check this page from time to time to make note of any changes samsung assumes no liability or responsibility for notifying changes of the forum rules samsung electronics america forum terms of service to use the forum, you must agree to forum terms of service with samsung electronics america, the company that runs the forum these terms are available on forum developer samsung com/tos terms and conditions the developer samsung com terms and conditions will apply in addition to these specific forum rules our liability to you these terms and conditions do not exclude our liability if any to you for personal injury or death resulting from our negligence fraud any matter for which it would be illegal for us to exclude or to attempt to exclude our liability samsung does not guarantee that this website or any product and/or services provided through the website, will be compatible with all or any hardware and software which you may use will be available all the time or at any specific time samsung is only liable to you for losses which you suffer as a result of a breach of these terms and conditions by us you are solely responsible for all and any losses which you may incur which were not a foreseeable consequence of us breaching these terms and conditions for example if you and samsung could not have contemplated those losses before or when you accessed this website samsung’s liability to you shall not in any circumstances include any business losses that you may incur, including, but not limited to, lost data, lost profits, lost revenue or business interruption by using the developer samsung com website, you agree to indemnify samsung, and other companies and corporations in the samsung group, against any costs, damage, claims, liabilities and expenses incurred as a result of your breach of these terms and conditions, the privacy policy, and/or any other applicable terms including the forum rules website content the information, documents, software and other materials "content" contained within developer samsung com are provided "as is" and are given for general information and interest purposes only samsung tries and ensures that the content contained on the website is accurate and up to date, but samsung cannot be held responsible for any errors, faults or inaccuracies you should not therefore rely on the content, and samsung recommends that you take further advice or seek further guidance before taking any action based on it you expressly agree and acknowledge that you use the content at your sole risk and samsung assumes no liability or responsibility for any user content or information provided by other users of the website in particular, samsung may make available software and technology which is "beta" meaning that it has not been fully tested or tested at all and you should make sure you use such technology at your sole risk and in a test environment taking into account the risk that it may cause damage to your software, hardware and other property you use to the fullest extent permitted by law, we expressly exclude all representations, conditions, warranties or other terms which apply to such content/information, including any implied warranties of satisfactory quality, merchantability, fitness for a particular or any purpose, and non-infringement which might otherwise apply but for this clause if, in a relevant jurisdiction, these limitations and exclusions are not permitted, then our liability shall be limited and excluded to the fullest extent permitted by law linking samsung may link to other websites which are not within its control when samsung does this, samsung will try and make it as clear as possible that you are leaving developer samsung com samsung is not responsible for these other sites in any way, and do not endorse them it is your responsibility to check the terms and conditions and privacy policy on any other site which you visit you may not link to developer samsung com from another site without our consent in writing any consent would be subject to complying with the following guidelines links must be to the home page http //developer samsung com/ you may not create a frame or any other border around developer samsung com the site from which you wish to link must comply with all relevant laws and regulations and must not contain content which may be considered to be distasteful or offensive and you must not imply that samsung endorses, or is associated with, any other site, product or service fees the use of the samsung developers services is free of charge samsung reserves the right to charge for samsung developers services and to change its fees, at its discretion samsung may from time to time launch other services which may be subject to a separate charge and terms contracting online nothing on developer samsung com is intended to be, nor should be construed as, an offer to enter into a contractual relationship with you or anyone else, except for these terms and conditions, which govern the relationship between us in relation to your use of developer samsung com and the services made available through it plus any additional terms we impose in relation to specific products and/or services on the website if you make a contract with a third party who is named or referred to on developer samsung com, it is your responsibility to ensure that you are comfortable with the terms of that contract, and to take legal advice if necessary governing law and jurisdiction the formation, existence, construction, performance, validity and all aspects whatsoever of these terms and conditions, or of any individual one of these terms and conditions, will be governed by the law of the republic of korea the seoul central district court will have exclusive jurisdiction to settle any disputes which may arise out of, or in connection with, these terms and conditions or the use of developer samsung com age limit everyone is welcome to visit developer samsung com however, if you want to participate on certain sections of the website or in certain activities available on the website, for example join a club or group, or enter a contest, you must register to the website in order to register, you must be at least 18 years old or receive your parents and/or guardians written consent your privacy we will treat personal data provided by you to us in accordance with our privacy policy you warrant that you are entitled to provide such personal data to us
We use cookies to improve your experience on our website and to show you relevant advertising. Manage you settings for our cookies below.
These cookies are essential as they enable you to move around the website. This category cannot be disabled.
These cookies collect information about how you use our website. for example which pages you visit most often. All information these cookies collect is used to improve how the website works.
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and tailor the website to provide enhanced features and content for you.
You have successfully updated your cookie preferences.