Android Luciq Migration
Overview
This guide helps you migrate your Android project from the Instabug SDK to the Luciq SDK. This change is part of a company-wide rebranding initiative. You can perform the migration manually by following the step-by-step instructions or use our automated migration script for a faster transition.
Prerequisites
Before starting the migration process, ensure your project meets the following requirements and take the necessary precautions.
Supported Instabug Versions
This migration guide supports projects currently using:
- Instabug SDK (Manual & Automated): 16.x.x and above
- Target Luciq SDK: 18.0.0
- All Instabug modules: Core, APM, Crash, Bug, Survey, Features Request, NDK Crash, Compose, Compose APM, OkHttp Interceptors, gRPC Interceptors, Compiler Extension, Test Report
If you're using Instabug version prior to 16.0.0, it's recommended to upgrade Instabug SDK, consulting change logs, first before proceeding with this migration process.
Pre-Migration Checklist
🔒 Backup Your Project
[ ] Commit all changes to your version control system (e.g., Git).
[ ] Create a dedicated backup branch to allow for a clean rollback if needed.
[ ] Build and run your project to confirm it's in a stable, working state before you begin.
💡 Tip: Assess your project's complexity using our Migration Complexity Assessment to choose the best approach for you.
🔍 Project Assessment
[ ] Identify all Instabug dependencies in your project
[ ] List custom Instabug configurations in build files
[ ] Note any custom ProGuard rules related to Instabug
[ ] Check for hardcoded Instabug references in code comments or strings
⚙️ Environment Preparation
[ ] Sync project and resolve any existing build issues
[ ] Clean build cache: ./gradlew clean
[ ] Ensure stable internet connection (for dependency downloads)
Migration Complexity Assistant
Project Type | Complexity | Recommended Approach | Estimated Time |
---|---|---|---|
Single-target, standard setup | 🟢 Simple | Automated script | 15-30 minutes |
Multi-target, standard config | 🟡 Medium | Automated script + manual review | 1-2 hours |
Complex setup, on-premise config | 🔴 Complex | Manual migration or script + careful review | 2-4 hours |
When to Use Manual vs. Automated Migration
✅ Use Automated Migration When:
- You have a standard Instabug setup with minimal customization.
- You are using a supported Instabug version.
- Your project doesn't have complex custom build scripts that reference Instabug.
- You are comfortable using command-line tools and have created a backup.
⚠️ Use Manual Migration When:
- You have a heavily customized Instabug implementation.
- You are using an older, unsupported version of the Instabug SDK.
- Your project has complex build logic or dependencies that the script might not handle.
- You prefer granular control over every step of the migration process.
Step-by-Step Manual Migration
Step 1: Migrate Your Dependency
💡 Quick Option: This step can be automated using our migration script. Continue reading for manual instructions.
The general rule of thumb for migrating Instabug SDK dependencies is to:
- Replace
com.instabug.library
artifacts' group withai.luciq.library
- Replace the word/prefix
instabug
of artifacts' name(s) withluciq
- Upgrade the artifact version to
18.0.0
The exact artifact names' mapping is as follows
Instabug Artifact | Luciq Artifact |
---|---|
instabug | luciq |
instabug-apm | luciq-apm |
instabug-crash | luciq-crash |
instabug-bug | luciq-bug |
instabug-survey | luciq-survey |
instabug-features-request | luciq-features-request |
instabug-ndk-crash | luciq-ndk-crash |
instabug-compose | luciq-compose |
instabug-compose-apm | luciq-compose-apm |
instabug-apm-okhttp-interceptor | luciq-apm-okhttp-interceptor |
instabug-apm-grpc-interceptor | luciq-apm-grpc-interceptor |
instabug-core | luciq-core |
instabug-with-okhttp-interceptor | luciq-with-okhttp-interceptor |
instabug-plugin | luciq-plugin |
instabug-test-report | luciq-test-report |
instabug-compose-core | luciq-compose-core |
Example (1): Using Version Catalog libs.versions.toml
Before:
[versions]
instabug = "16.0.1"
# Rest of versions
[libraries]
instabug = {group = "com.instabug.library", name = "instabug", version.ref = "instabug"}
instabug-compose = {group = "com.instabug.library", name = "instabug-compose", version.ref = "instabug"}
After:
[versions]
luciq = "18.0.0"
# Rest of versions
[libraries]
instabug = {group = "ai.luciq.library", name = "luciq", version.ref = "luciq"}
instabug-compose = {group = "ai.luciq.library", name = "luciq-compose", version.ref = "luciq"}
Example (2): Declaring dependencies in build.gradle
Before:
dependencies {
implementation 'com.instabug.library:instabug:16.0.1'
implementation 'com.instabug.library:instabug-compose:16.0.1'
}
After:
dependencies {
implementation 'ai.luciq.library:luciq:18.0.0'
implementation 'ai.luciq.library:luciq-compose:18.0.0'
}
Step 2: Migrate your plugin integration
To migrate your plugin integration, the following steps should be executed:
- Replace
com.instabug.library:instabug-plugin:16.0.1
classpath
artifact withai.luciq.library:luciq-plugin:18.0.0
(If you're adding the plugin as aclasspath
to your root project'sbuild.gradle
file) - Replace
com.instabug.library
root plugin id withai.luciq.library
and upgrade the version to18.0.0
(If you're adding the plugin as anid
to your root project'sbuild.gradle
file or Version Catalog) - Replace Instabug's plugin ids in your app/module level
build.gradle
file as per plugins mapping
The exact mapping of Instabug's plugins is as follows
Instabug Plugin | Luciq Plugin |
---|---|
instabug | luciq |
instabug-crash | luciq-crash |
instabug-apm | luciq-apm |
instabug-compiler-extension | luciq-compiler-extension |
Example (1): Instabug's plugin added as a classpath
Before:
buildScript {
dependencies {
classpath 'com.instabug.library:instabug-plugin:16.0.1'
}
}
After:
buildScript {
dependencies {
classpath 'ai.luciq.library:luciq-plugin:18.0.0'
}
}
Example (2): Instabug's plugin added as root project plugin
Before:
plugins {
id("com.instabug.library") version "16.0.1" apply false
}
After:
plugins {
id("ai.luciq.library") version "18.0.0" apply false
}
Example (3): Instabug's Plugin defined in Version Catalog
Before:
[versions]
instabug = "16.0.1"
[libraries]
# Libraries defined here
[plugins]
instabug = { id = "com.instabug.library", version.ref = "instabug" }
After:
[versions]
luciq = "18.0.0"
[libraries]
# Libraries defined here
[plugins]
instabug = { id = "ai.luciq.library", version.ref = "luciq" }
Example (4): Module's level plugin integration
Before:
plugins {
id("instabug")
id("instabug-apm")
id("instabug-crash")
}
After:
plugins {
id("luciq")
id("luciq-apm")
id("luciq-crash")
}
Step 3: Migrate your plugin configurations
If you're not using Instabug plugin, you can safely skip this step.
Changes done in plugin configurations can be listed as follows:
Instabug
andinstabug
configuration closures and removed in favor of a unifiedluciq
closure- APM's specific
debugEnabled
configuration property is removed in favor in a more genericsetDebugLogsEnabled()
configuration method underluciq
block directly.
The exact mapping of Instabug's plugin configurations' changes in naming is as follows:
Instabug Naming | Luciq Naming |
---|---|
Instabug{}/instabug{} | luciq{} |
Instabug { APM { } } | luciq { apm { } } |
To complete Plugin's configurations' migration, the following should be done in order:
- Change the name of
instabug/Instabug
blocks toluciq
- If you are using both blocks,
instabug
andInstabug
, merge the blocks' contents under a singleluciq
block. - If the configuration block, which is now
luciq
, hasAPM
(upper case) block inside, change it toapm
(lower case) - If
apm
block hasdebugEnabled = {boolean}
property set, remove it and addsetDebugLogsEnabled({boolean})
to the top-levelluciq
block
Example (1): Using only the legacy Instabug
config block
Before:
Instabug {
APM {
debugEnabled = true
networkEnabled = false
fragmentSpansEnabled = true
}
}
After:
luciq {
// Added for backward compatibility with apm.debugEnabled = true
setDebugLogsEnabled(true)
apm {
// debugEnabled = true is removed
networkEnabled = false
fragmentSpansEnabled = true
}
}
Example (2): Using both blocks, Instabug
(legacy) and instabug
Before:
Instabug {
APM {
debugEnabled = true
networkEnabled = false
fragmentSpansEnabled = true
}
}
instabug {
setDebugLogsEnabled(false)
setCaptureComposeNavigationDestinations(true)
compilerExtension{
// Compiler extension configurations
}
}
After:
luciq {
// Value changed to true for backward compatibility with apm.debugEnabled = true
setDebugLogsEnabled(true)
setCaptureComposeNavigationDestinations(true)
apm {
// debugEnabled = true is removed
networkEnabled = false
fragmentSpansEnabled = true
}
compilerExtension{
// Compiler extension configurations
}
}
Example (3): Using only the new instabug
block
Before:
instabug {
setDebugLogsEnabled(false)
setCaptureComposeNavigationDestinations(true)
apm {
debugEnabled = true
networkEnabled = false
fragmentSpansEnabled = true
}
compilerExtension{
// Compiler extension configurations
}
}
After:
luciq {
// Value changed to true for backward compatibility with apm.debugEnabled = true
setDebugLogsEnabled(true)
setCaptureComposeNavigationDestinations(true)
apm {
// debugEnabled = true is removed
networkEnabled = false
fragmentSpansEnabled = true
}
compilerExtension{
// Compiler extension configurations
}
}
Step 4: Migrate your source code (Kotlin/Java)
The key changes done when it comes to source code:
- All SDK packages are now prefixed with
ai.luciq
instead ofcom.instabug
- All publicly usable classes/methods containing
Instabug
,IBG
,instabug
oribg
in their naming is now replaced withLuciq
orluciq
according to casing.
The exact mapping for publicly available classes/methods is as follows:
Type | Instabug Naming | Luciq Naming |
---|---|---|
Class | Instabug | Luciq |
Class | IBGNonFatalException | LuciqNonFatalException |
Class | InstabugInvocationEvent | LuciqInvocationEvent |
Class | InstabugFloatingButtonEdge | LuciqFloatingButtonEdge |
Class | InstabugVideoRecordingButtonPosition | LuciqVideoRecordingButtonPosition |
Class | IBGBugReportingType | LuciqBugReportingType |
Class | InstabugApmOkHttpEventListener | LuciqApmOkHttpEventListener |
Class | InstabugAPMGrpcInterceptor | LuciqAPMGrpcInterceptor |
Class | InstabugAPMOkhttpInterceptor | LuciqAPMOkhttpInterceptor |
Class | InstabugOkhttpInterceptor | LuciqOkhttpInterceptor |
Class | InstabugColorTheme | LuciqColorTheme |
Enum | InstabugColorThemeLight | LuciqColorThemeLight |
Enum | InstabugColorThemeDark | LuciqColorThemeDark |
Class | InstabugCustomTextPlaceHolder | LuciqCustomTextPlaceHolder |
Class | IBGSessionLifecycleCallback | LuciqSessionLifecycleCallback |
Class | IBGTheme | LuciqTheme |
Class | InstabugNetworkLog | LuciqNetworkLog |
Class | InstabugLog | LuciqLog |
Class | IBGFeatureFlag | LuciqFeatureFlag |
Method | Replies.isInstabugNotification() | Replies.isLuciqNotification() |
Method | Instabug$Builder.setInstabugLogState() | Luciq$Builder.setLuciqLogState() |
Method | SessionReplay.setIBGLogsEnabled() | SessionReplay.setLuciqLogsEnabled() |
Composable Function | IBGScreen() | LuciqScreen() |
Composable Function | AutoIBGScreen() | AutoLuciqScreen() |
Extension function (Modifier) | ibgTrackingInfo() | luciqTrackingInfo() |
Extension function (Modifier) | ibgPrivate() | luciqPrivate() |
Extension function (NavGraphBuilder) | ibgComposable_2_7() | luciqComposable_2_7() |
Extension function (NavGraphBuilder) | ibgComposable_2_8() | luciqComposable_2_8() |
Extension function (NavGraphBuilder) | ibgDialog() | luciqDialog() |
Extension function (OkHttpClient$Builder) | addInstabugApmInterceptor() | addLuciqApmInterceptor() |
To conduct a successful migration, the following steps should be executed to all Java/Kotlin files in your source code:
- Replace the prefix
com.instabug
of anyimport
statement withai.luciq
- If you're using any of Instabug's public classes with fully qualified name in code, replace package prefix
com.instabug
withai.luciq
- Follow classes/methods mapping table to replace any Instabug symbol in use with Luciq's equivalent
- If you're adding any of Instabug's classes to your
proguard-rules
files for any reason, make sure to replacecom.instabug
package prefix withai.luciq
there too!
Step 5: Migrate your Manifest file
You don't have to execute this step unless one of the following cases applies:
- You're specifying your Instabug's application token as a
metadata
element,com.instabug.APP_TOKEN
, for early SDK initialization. - You're overriding one of Instabug's defined framework components, like
Activities
orContentProviders
, to either remove or alter the specifications originally declared.
If none of the above applies, you can safely skip this step.
The exact mapping table for Instabug's framework components, having “Instabug” in their names, is as follows:
Type | Instabug Naming | Luciq Naming |
---|---|---|
ContentProvider | InstabugContentProvider | LuciqContentProvider |
Activity | InstabugDialogActivity | LuciqDialogActivity |
Activity | InstabugThanksActivity | LuciqThanksActivity |
To complete the migration of your Manifest.xml file, you need to do the following:
- If you're specifying Instabug token as a metadata element with key
com.instabug.APP_TOKEN
, you need to change the key toai.luciq.APP_TOKEN
- If you're overriding any of Instabug components, you need to replace com.instabug package name prefix of components with
ai.luciq
- Map components' names as specified by the mapping table.
Step 6: Migrate your resources
If your project is not using instabug_config.json
file for customizing Instabug’s endpoints, you can safely skip this step.
To complete the configurations' file migration, you need to do the following:
- Change the file name to
luciq_config.json
instead ofinstabug_config.json
- In the file content, replace the key
instabug_domain
withluciq_domain
Automated Migration Script
Introduction
To simplify and accelerate the migration process, we've developed a comprehensive automated migration script that handles all the steps outlined in this guide. The Luciq Migrator is a Python-based tool that automatically migrates your Android project from Instabug SDK to Luciq SDK, covering:
- Gradle Files: Version catalogs (
libs.versions.toml
), dependencies, and plugin configurations → See Step 1 & Step 2 - Plugin Configurations: Legacy and new configuration block migrations → See Step 3
- Java/Kotlin Source Code: Package imports, class names, method names, and fully qualified references → See Step 4
- Android Manifests: App tokens and ContentProvider declarations → See Step 5
- Resource Files: Configuration files (
instabug_config.json
→luciq_config.json
) → See Step 6 - ProGuard Rules: Package name references → See Step 4
The script ensures 100% accuracy by following the exact mapping tables defined in this guide, while providing safety features like automatic backups and dry-run previews.
Where to find it?
You can find the migration script in Luciq's Github public repository (link).
Step-by-Step Usage Guide
Step 1: Extract the Migration Scripts
- Extract the
luciq-migrator.zip
file in your Android project root directory:cd /path/to/your/android/project unzip luciq-migrator.zip
- Verify the directory structure:
your-android-project/ ├── luciq-migrator/ # ← Migration scripts directory ├── src/ # ← Your project source code ├── build.gradle # ← Your project files └── ...
Step 2: Make the Script Executable
chmod +x luciq-migrator/migrate-to-luciq.sh
Step 3: Preview Changes (Recommended)
Always preview changes first to understand what will be modified:
./luciq-migrator/migrate-to-luciq.sh --dry-run --output-file migration-preview.txt
This will show you:
- All files that will be modified
- Exact changes that will be made
- Migration statistics
- No actual changes are applied
Step 4: Run the Migration
Once you're satisfied with the preview, run the full migration:
./luciq-migrator/migrate-to-luciq.sh
The script will:
- Create a complete backup of your project in migration-backup/
- Migrate all files according to the mapping tables
- Provide detailed statistics of the migration process
Step 5: Verify the Migration
After migration, verify that everything was converted correctly:
# Check for any remaining Instabug references
grep -r "com\.instabug" . --exclude-dir=migration-backup
# Build your project to ensure everything compiles
./gradlew clean build
Options Catalog
The migration script provides several options to customize the migration process:
Basic Options
Option | Description | Example |
---|---|---|
--help | Show help message and usage examples | ./luciq-migrator/migrate-to-luciq.sh --help |
--dry-run | Preview changes without making any modifications | ./luciq-migrator/migrate-to-luciq.sh --dry-run |
--output-file FILE | Write dry-run output to FILE (only with --dry-run) | ./luciq-migrator/migrate-to-luciq.sh --dry-run --output-file changes.txt |
Advanced Options
Option | Description | When to Use | Example |
---|---|---|---|
--source-only | Migrate only Java/Kotlin files, Manifest & resources (skip Gradle) | When you've already migrated Gradle files manually or want to test source code migration first | ./luciq-migrator/migrate-to-luciq.sh --source-only |
--no-backup | Skip creating backup (not recommended) | Only when you have your own disk backup strategy or your project is already version controlled (using Git) | ./luciq-migrator/migrate-to-luciq.sh --no-backup |
Combining Options
You can combine multiple options for specific use cases:
# Preview source-only changes
./luciq-migrator/migrate-to-luciq.sh --source-only --dry-run
# Run source-only migration without backup (advanced users)
./luciq-migrator/migrate-to-luciq.sh --source-only --no-backup
# Run migration on a specific project path
./luciq-migrator/migrate-to-luciq.sh /path/to/different/project
Migration Modes
The script supports two migration modes:
🔄 Comprehensive Mode (Default)
- Migrates all file types: Gradle, Java/Kotlin, Manifest, Resources
- Handles complex plugin configurations
- Uses regex-based TOML parsing for version catalog support
- Recommended for most users
📝 Source-Only Mode (--source-only
)
- Migrates only: Java/Kotlin files, Manifest, Resources
- Skips all Gradle file migrations
- No external dependencies required
- Use when: You've already migrated Gradle files manually or want staged migration
Safety Features
🛡️ Automatic Backup: Creates complete project backup before migration
👁️ Dry Run Mode: Preview all changes without applying them
📊 Detailed Statistics: Shows exactly what was modified
🔄 Easy Rollback: Restore from backup if issues occur
⚡ Zero Dependencies: No external modules required, uses built-in Python functionality
System Requirements
- Python 3.6+: The script requires Python 3.6 or higher
- No External Dependencies: Uses built-in Python modules only
- All Migration Scripts: Must be kept in the same directory
💡 Pro Tip: Always run --dry-run
first to understand the scope of changes, especially on large projects. The migration script is designed to be safe and reversible, but previewing changes helps ensure confidence in the process.
Q&As
Migration Preparations
Q: What should I do before starting the migration process?
Before proceeding with the migration from Instabug to Luciq, you've to:
- Commit all the changes you currently have on your working branch to ease the ability of reverting migration changes.
- Clean build cache using ./gradlew clean
- Sync the project making sure that all dependencies are correctly resolved
- Build the project to make sure it compiles successfully
- Ensure stable internet connection for new dependencies download
Instabug Version Compatibility
Q: Is there a recommended Instabug version to be in use before migration?
It's recommended that Instabug version 16.0.0 or higher be in use for the migration to proceed gracefully.
Q: Will Instabug artifacts still be available by the time I do the migration?
Yes. Instabug artifacts will resume to be available with the last version being 16.0.1
Q: Is it possible to proceed with the migration without upgrading to Instabug version 16.0.0?
It's generally not recommended because major releases of Instabug SDK might have included breaking changes, like APIs removal for example, which might be the cause of build issues after completing the migration.
In addition, the guides provided in this document do not take into consideration any previously removed APIs. So, to migrate directly from a version older than 16.0.0 you've to revise Instabug's major releases' change logs to know more about removed APIs and adjust your usage accordingly.
Q: What's the expected output of migrating from older version than 16.0.0 without revising change logs?
If any of the previously removed APIs is in use by your project before the migration, it will end up with unresolved references compilation issues.
Automated Script
Q: Are there specific system requirements to run the automated script?
The automated script is written in python. So, the only requirement is to have Python 3.6+ installed.
To figure out which python version installed, you can run python3 --version
.
Q: What exactly does the script do?
The script performs a comprehensive migration covering all of the 6-steps outlined. In a nutshell, the script:
- Alters legacy Instabug dependencies with Luciq equivalent in your project configuration files.
- Adjusts SDK's Gradle Plugin configurations
- Do the necessary adjustments to your source code files (Kotlin/Java).
Q: What types of build configurations the script supports?
The automated script supports:
- Version catalog (.
toml
) buildSrc
modulesbuild.gradle
files (groovy/kts
)
Q: When should I totally depend on the script to carry-out the migration?
In most cases, the script will carry-out the migration gracefully unless your project's build configuration files are custom or not following general Android development patterns.
Q: If build configurations are custom in my project, will I have to carry-out all the migration steps manually?
No, you can upgrade your dependencies (build configuration files) executing migration steps 1 through 3 in the guide manually then run the script with --source-only
mode to handle your source code.
Q: My project is version controlled. Is it mandatory for the script to create a backup folder?
No. If your project is version controlled, it's generally advisable to run the script with --no-backup option to prevent it from creating the backup folder.
Q: Am using Instabug version lower than 16.0.0, is it still possible to use the automated script?
It's generally not recommended for the same considerations listed in Instabug Version Compatibility section.
Updated about 9 hours ago