Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Linkester

Maven Central

Linkester is an Android library that aims to help Android developers test their deep links implementation.

The idea is to have a new launcher activity for your App (in debug builds) that will list all deep/app links available in your App and with a click on any of them you can test it.

The gradle plugin will collect all deep/app links registered for your App and will list them automatically.

You still also have the option to list some links manually (most used for example or some links with predefined query params)

Features

  • Auto colelct all deep/app links.
  • Manually add some deep links.
  • Write any deep link and click on "try it out" button to see how your App will react.
  • Long press on a deep link will auto fill it in the edit text box so that you can edit or add query params to the deep link before testing it.

Demo

Getting started

  1. To use Linkester, add the Linkester dependency to your app’s build.gradle file:

    Groovy
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation 'com.mlegy.linkester:linkester:0.0.5'
    }
    Kotlin
    dependencies {
    // debugImplementation because Linkester should only run in debug builds.
    debugImplementation("com.mlegy.linkester:linkester:0.0.5")
    }
  2. There is 2 ways to list the deep links from your App into Linkester:

    1. Automatically collect all deep links from the App. To be able to let Linkester gather all your deep/app links automatically we only need to apply Linkester Gradle plugin into your project.

      Build script snippet for use in all Gradle versions:

      Groovy
      buildscript {
      repositories {
      maven {
      url "https://plugins.gradle.org/m2/"
      }
      }
      dependencies {
      classpath "com.mlegy.linkester:gradle-plugin:0.0.5"
      }
      }
      apply plugin: "com.mlegy.linkester"
      Kotlin
      buildscript {
      repositories {
      maven {
      url = uri("https://plugins.gradle.org/m2/")
      }
      }
      dependencies {
      classpath("com.mlegy.linkester:gradle-plugin:0.0.5")
      }
      }
      apply(plugin ="com.mlegy.linkester")

    Please note that the gradle plugin will try to find all deep links in all modules in your App, so applying it in only one module (app module) is enough to collect all deep links from other feature modules too.

    Please also note the auto generated file is only generated for debuggable build variants, so if you use the lib in non-debuggable build variants (which you shouldn't) no auto collected deep links will be there in the library activity.

    1. Manually add your most common used deep links yourself. The second option you can use is to provide a json file with most common deep links in your app. You can do that by creating a raw json file in res/values the file must be named linkester_manually_added_links.json It should be a list of deep links where each link is an object of title and link fields Example:
      [ { "title": "Home", "link": "https://app.melegy.com/home" }, { "title": "Item details", "link": "https://app.melegy.com/list?id=12" }
      ]

Credits


🙏 If you like Linkester you can show support by starring ⭐ and/or sponsoring 💟 this repository.

License

Copyright 2021 Ahmad Melegy.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

Linkester is an Android library that aims to help Android developers test their deep links implementation.

Topics

Resources

Stars

82 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages