{"id":20954,"date":"2014-07-16T11:55:00","date_gmt":"2014-07-16T10:55:00","guid":{"rendered":"https:\/\/www.inovex.de\/\/?p=45"},"modified":"2014-07-16T11:55:00","modified_gmt":"2014-07-16T10:55:00","slug":"the-art-of-art","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/","title":{"rendered":"The Art of ART"},"content":{"rendered":"<p>This is part one of a small series of articles about the newest Android version <strong>Kitkat<\/strong> that I wrote at inovex GmbH. The series is supposed to give you a deeper insight into the internals and changes of Android 4.4 from a developer&#8217;s perspective. My job was to start with the new runtime: <strong>ART.<\/strong><!--more--><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#Engine-inspection-what-is-the-ART\" >Engine inspection: what is the ART<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#But-how-is-that-accomplished\" >But how is that accomplished?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#A-startup-story-from-dex-to-oat\" >A startup-story: from dex to oat<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Engine-inspection-what-is-the-ART\"><\/span>Engine inspection: what is the ART<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>One of KitKats most exciting features is also its less advertised one: the new experimental Runtime, called ART. Google <a href=\"http:\/\/goo.gl\/9Jzgdo\" target=\"_blank\" rel=\"noopener\">didn\u2019t release much information<\/a> about it, apart from the fact that it exists. But I think that this feature is likely to have an immense impact on further releases because with ART Android turns its back to its executed dalvik byte-code towards a platform specific, ahead-of-time (AOT) compiled binary code.<\/p>\n<p>The Dalvik VM has followed the traditional Java approach for virtual machines: Source code gets compiled into a platform independent byte code which gets compiled on the fly into machine code (JIT \u2013 Just in Time compilation). ART follows a different approach using the AOT paradigm, in which the code gets compiled into native code upfront execution.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"But-how-is-that-accomplished\"><\/span>But how is that accomplished?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The inter-portability of apps is essential for Android, since there are various platforms with currently three different architectures (MIPS, x86, ARM) on the market. So they had to find a way to combine both worlds: inter-portability and native binary code execution. Their solution is, as far a we know, unique in the mobile world: ship an intermediate byte code executable and perform the last compilation step \u201cahead-of-time\u201c on the target device.<\/p>\n<p>A deeper look into the ART sources reveal that they make use of LLVM for the last compilation step. The compilation process to native code is currently done at installation time.<\/p>\n<p>On top of that, the Android team faces another challenge: Compatibility with the existing Dalvik VM\/DEX technology. To deal with that, they introduced a way to convert the dex format to their new OAT format. Read on to get more details on this.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"A-startup-story-from-dex-to-oat\"><\/span>A startup-story: from dex to oat<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Let\u2019s find out how android is able to execute existing apps on ART without the need of a new app-release. For the following steps I use some new tools that come with the the new runtime:<\/p>\n<p>dex2oat and oatdump, both can be found in <span class=\"lang:sh decode:true crayon-inline \">&lt;aosproot&gt;out\/host\/&lt;yourplatform&gt;\/bin\/dex2oat<\/span>. In addition to that, some usual linux tools like objdump, nm, hexdump and hexedit were used.<\/p>\n<p>After switching the runtime from Dalivk to ART the bootup process takes a really long time, about 10 minutes, as the system is updating the installed Apps. A closer look at the ADB output shows what is happening: obviously, some kind of <em>image<\/em> is created by dex2oat.<\/p>\n<pre class=\"lang:sh decode:true \">I\/art ( 123): GenerateImage: \/system\/bin\/dex2oat --image=\/data\/dalvik-cache\/system@framework@boot.art@classes.dex--runtime-arg-Xms64m--runtime-arg-Xmx64m--dex-file=\/system\/framework\/core-libart.jar--dex-file=\/system\/framework\/conscrypt.jar--dex-file=\/system\/framework\/okhttp.jar--dex-file=\/system\/framework\/core-junit.jar--dex-file=\/system\/framework\/bouncycastle.jar--dex-file=\/system\/framework\/ext.jar--dex-file=\/system\/framework\/framework.jar--dex-file=\/system\/framework\/framework2.jar--dex-file=\/system\/framework\/telephony-common.jar--dex-file=\/system\/framework\/voip-common.jar --dex-file=\/system\/framework\/mms-common.jar --dex-file=\/system\/framework\/android.policy.jar --dex-file=\/system\/framework\/services.jar --dex-file=\/system\/framework\/apache-xml.jar --dex-file=\/system\/framework\/webviewchromium.jar --oat-file=\/data\/dalvik-cache\/system@framework@boot.art@classes.oat--base=0x60000000--image-classes-zip=\/system\/framework\/framework.jar--image-classes=preloaded-classes<\/pre>\n<p>A process which logs as <span class=\"lang:sh decode:true crayon-inline \">art<\/span> , started by the <span class=\"lang:sh decode:true crayon-inline \">system_server<\/span> , creates a huge <em>image<\/em> file using the dex2oat tool. The commandline arguments suggest split up into the following parts:<\/p>\n<ul>\n<li>some runtime arguments for a VM<\/li>\n<li>several DEX files that will be compiled into the image<\/li>\n<li>the output image filename<\/li>\n<li>the output oat-filename<\/li>\n<li>a jar file containing classes that should be compiled into the image<\/li>\n<li>and a specifier, describing which classes form the jar file should be used<\/li>\n<\/ul>\n<p>During the image creation, all contained DEX files were compiled. For example:<\/p>\n<pre class=\"lang:sh decode:true \">W\/dex2oat ( 397): Verification of void org.ccil.cowan.tagsoup.HTMLSchema.() took 187.968ms<\/pre>\n<p>Looks familiar, doesn\u2019t it? Remember the <em>zygote<\/em> in a dalvik driven environment? Basically a boilerplate image that executes the actual application or code and contains frequently used classes. It is definitely no replacement of the zygote, since it still exists in an ART environment, but you can think of it in the same way.<\/p>\n<p>In the further startup process, the package manager runs dexopt on every installed app. But in addition to that, every resulting dex file is compiled into an oat file by the already known dex2oat compiler<\/p>\n<p>Here is an exemplary log of the Keyboard:<\/p>\n<pre class=\"lang:sh decode:true \">I\/PackageManager(559): Running dexopt on: com.android.inputmethod.latin\n\nI\/dex2oat (918): dex2oat: \/data\/dalvik-cache\/system@app@LatinIME.apk@classes.dex<\/pre>\n<p>Now let\u2019s summarize what we have so far: we know that ART uses a zygote-like image, which is very likely to execute the actual app later. It also performs a lot of compilation, even on all framework classes. This means that literally the whole system which we know as Android is converted. I think this is a hint that ART is much more than a so-much-better dalvik \u2013 it indicates a change of paradigm. But now stay tuned for the next part of our series, where we are going to take a closer look on the new executable file format: OAT file analysis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is part one of a small series of articles about the newest Android version Kitkat that I wrote at inovex GmbH. The series is supposed to give you a deeper insight into the internals and changes of Android 4.4 from a developer&#8217;s perspective. My job was to start with the new runtime: ART.<\/p>\n","protected":false},"author":14,"featured_media":12059,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[510],"service":[],"coauthors":[{"id":14,"display_name":"Matthias Schaff","user_nicename":"mschaff"}],"class_list":["post-20954","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-apps-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Art of ART - inovex GmbH<\/title>\n<meta name=\"description\" content=\"The article is supposed to give you a deeper insight into the changes of Android 4.4 from a developer&#039;s perspective, starting with the new runtime: ART.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Art of ART - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"The article is supposed to give you a deeper insight into the changes of Android 4.4 from a developer&#039;s perspective, starting with the new runtime: ART.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-16T10:55:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2300\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthias Schaff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded-1024x302.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthias Schaff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Matthias Schaff\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/\"},\"author\":{\"name\":\"Matthias Schaff\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/293e47490d25b6c8a0739950e0f4fc0a\"},\"headline\":\"The Art of ART\",\"datePublished\":\"2014-07-16T10:55:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/\"},\"wordCount\":760,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"keywords\":[\"Apps\"],\"articleSection\":[\"Applications\",\"English Content\",\"General\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/\",\"name\":\"The Art of ART - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"datePublished\":\"2014-07-16T10:55:00+00:00\",\"description\":\"The article is supposed to give you a deeper insight into the changes of Android 4.4 from a developer's perspective, starting with the new runtime: ART.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"width\":2300,\"height\":678,\"caption\":\"Core Embedded\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/the-art-of-art\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Art of ART\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/293e47490d25b6c8a0739950e0f4fc0a\",\"name\":\"Matthias Schaff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g2f6063a3750e31ea610a1ababa629940\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g\",\"caption\":\"Matthias Schaff\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/mschaff\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Art of ART - inovex GmbH","description":"The article is supposed to give you a deeper insight into the changes of Android 4.4 from a developer's perspective, starting with the new runtime: ART.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/","og_locale":"de_DE","og_type":"article","og_title":"The Art of ART - inovex GmbH","og_description":"The article is supposed to give you a deeper insight into the changes of Android 4.4 from a developer's perspective, starting with the new runtime: ART.","og_url":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2014-07-16T10:55:00+00:00","og_image":[{"width":2300,"height":678,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","type":"image\/jpeg"}],"author":"Matthias Schaff","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded-1024x302.jpg","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Matthias Schaff","Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten","Written by":"Matthias Schaff"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/"},"author":{"name":"Matthias Schaff","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/293e47490d25b6c8a0739950e0f4fc0a"},"headline":"The Art of ART","datePublished":"2014-07-16T10:55:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/"},"wordCount":760,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","keywords":["Apps"],"articleSection":["Applications","English Content","General"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/","url":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/","name":"The Art of ART - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","datePublished":"2014-07-16T10:55:00+00:00","description":"The article is supposed to give you a deeper insight into the changes of Android 4.4 from a developer's perspective, starting with the new runtime: ART.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","width":2300,"height":678,"caption":"Core Embedded"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/the-art-of-art\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"The Art of ART"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/293e47490d25b6c8a0739950e0f4fc0a","name":"Matthias Schaff","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g2f6063a3750e31ea610a1ababa629940","url":"https:\/\/secure.gravatar.com\/avatar\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g","caption":"Matthias Schaff"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/mschaff\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/20954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=20954"}],"version-history":[{"count":0,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/20954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/12059"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=20954"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=20954"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=20954"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=20954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}