Automation on Android no longer needs root. Two mature channels: the accessibility service reads the UI, and ADB sends commands.
Packaging, distribution, iteration, licensing
To sell a script, four things have to be finished: packaging, distribution, iteration, and licensing. What the user receives, how it reaches the user, how you change it later, and who can use it for how long.
| Stage | What you do | What problem it solves |
|---|---|---|
| Packaging | Compile the script project into an installable APK | The user receives a package they can install and run |
| Distribution | Publish the packaged output to end users | The product reaches users and runs independently of the developer’s computer |
| Iteration | Keep fixing bugs, updating logic, and adding features | After it is sold, you can still change it and still fix it |
| Licensing | Card-key / license checks that control who can use it and for how long | Limits cracking and theft, and turns a one-time effort into ongoing income |
Miss one and the script is still for your own use. The examples below use the EasyClick Android edition (official docs). It is a no-root Android automation platform, supports Android 5.0 through the current system, scripts are written in JavaScript, and Java libraries can be called. The current EC version is 12.4. The matching IDEA plugin does not need activation on IDEA 2026.2 and later (first project tutorial).
When you package, decide where the source is compiled. EasyClick packs in one click inside the IDEA plugin, entirely on the local machine, with no upload to the cloud (product overview). The output is an APK you can install directly. Cloud packaging sends the source to a third-party server to compile. One extra handoff is one more chance of a leak.
| Comparison | Local offline packaging | Cloud packaging |
|---|---|---|
| Where the source goes | Stays on the machine, compiled locally the whole way | Must be uploaded to a third-party server to compile |
| Leak risk | Controllable, depends on the security of the machine | Depends on the security and trust of the third-party server |
| Network dependency | Packaging finishes offline | Usually needs a network while you wait for the compile |
| Fits | Commercial scripts, source that is sensitive | Scenes where source handoff is not a concern |
Source that never passes through a third-party server is the most direct difference of local packaging. Every extra hop for a commercial script’s source is another chance it gets copied or resold.
The package still has to be deliverable. Offline runs and standalone publishing are two related things (product overview). An offline run means the script does not depend on the computer or the IDE. Unplug the cable, plug in power, and the task keeps running. Standalone publishing means the APK goes straight to the user to install, and the user never touches your development environment. The customer does not need to know how to develop, and you do not need to be there.
Hot-update iteration and anti-crack
After it is sold, requests and bugs keep coming. If every change means repackaging, shipping a new APK, and asking users to uninstall and reinstall, iteration stays slow. A hot update changes the compiled IEC script file. The APK does not get reinstalled (hot-update docs). update.json in the project sets the server address: update_url is the update endpoint, version is the current script version, timeout is the request timeout, and appendDeviceInfo decides whether to attach basic device information. The script requests this endpoint at startup. An empty string from the server means no update. JSON means there is a new version. The JSON carries download_url and version, and optionally md5, dialog, msg, and force. EC downloads the new IEC and loads it.
Note: the version number in
update.jsonhas to stay consistent with the version the server endpoint returns, or you can hit abnormal cases.
You can auto-update when the UI starts, or, while the script is running, use hotupdater methods updateReq, updateDownload, getUpdateResp, and getErrorMsg to request, download, and restart on your own. If you do not want to write a server, the network-verification platform includes hot update: connect Aliyun OSS, upload the IEC, generate a download URL and an MD5, and put the URL into update.json (network-verification docs).
| Comparison | Traditional APK update | Code hot update |
|---|---|---|
| What gets updated | The whole APK | The compiled IEC script file |
| What the user does | Download and install a new APK | Nothing visible; the script loads the new version on its own |
| Release speed | Repackage, distribute, and the user installs | Put one new package on the server |
| Cost of a mistake | A wrong installed version is hard to roll back | Forced update, MD5 checks, and similar controls stay available |
| Typical scene | First install, major version release | Daily iteration, bug fixes, new features |
Hot update turns an everyday script change from shipping a new APK into putting one new package on the server. Ongoing charges depend on still being able to change it and still being able to ship it.
Code that runs on a user’s device can be reversed and extracted. If the card-key logic is bypassed, the script is given away. Absolute protection against cracking is not available. What you can do is raise the cost until cracking is not worth it. Obfuscation adds junk instructions and changes control flow at compile time, so the code is hard to read and hard to restore (code obfuscation docs). Newer IDEA plugins generate obfuscator.json under the project, and the parameters come from javascript-obfuscator. Once the obfuscator path is set, compilation obfuscates the JS first and then compiles a second time, covering both JS and DEX output. Obfuscation grows the size, and splitting code across files is easier to manage. It also uses a lot of computer resources. Turn it off while debugging, and turn it on again for release and packaging. If you change the config yourself, the obfuscated build may fail to run. Restore the default. Obfuscation does not stop every reverse-engineering attempt. It raises the cost.
Card-key licensing, the monetization path, and compliance
Packaging, distribution, and iteration are in place, and licensing is still required. Without a license, a script that gets out is out of your control. With a license, who uses it, for how long, and on how many devices all sit in the admin console. EasyClick’s network-verification platform is at http://uc.ieasyclick.com (network-verification docs). Add a software entry to get an appid and a secret. After the script calls ecNetCard.netCardInit, it can validate cards. The script list records version, package name, and fingerprint. A card can be one device per card, or several devices per card. The valid day count starts from the first device binding, and unused time is not counted. You can set an unbind password, kick a session (the later device kicks the earliest binding offline), and disable a card. When a card expires or you need more device slots, use batch time extension and batch online-capacity addition. Customers do not rebind. Fingerprints can check the APK and the IEC. Uploading a file only computes the MD5 and does not store the file. After you fill in the software package name, a script whose package name does not match cannot run. Critical business code or parameters can live in cloud variables, read with ecNetCard.netCardGetCloudVar. If you find a crack, replace them remotely with ecNetCard.netCardUpdateCloudVar. The approach in the docs is to use several of these together:
| Measure | Role | Cost |
|---|---|---|
| Network-verified card keys | License check. An invalid card and the script cannot run | Register on the platform and generate cards |
| Obfuscation of critical code | Raises the reverse-engineering bar | Larger size and more resource use. Turn it on at release |
| Package name / APK / script fingerprint checks | Check whether the install package and the script were tampered with | Upload a record on each package. A bit of extra work |
| Cloud variables / remote code | After a crack, replace the code remotely and limit the damage | Critical logic has to be designed so it can be delivered remotely |
Card keys, obfuscation, fingerprints, and cloud variables together cover both licensing and a package that has been modified. The order is local packaging, offline distribution, hot update, then card-key licensing.
| Stage | Action | Output / goal |
|---|---|---|
| 1. Local packaging | One-click APK packaging in the IDEA plugin, entirely local | An installable, publishable package |
| 2. Offline distribution | Publish the APK to end users | Users install and run it, with no dependency on your computer |
| 3. Hot-update iteration | update.json points at the update URL, and the server can hold a new IEC at any time |
Bug fixes and new features with no reinstall |
| 4. Card-key licensing | Generate cards on the network-verification platform and turn on fingerprint checks | Licensing stays controllable, and income can continue |
Split the source into modules before packaging. Later obfuscation and maintenance are both lighter. At distribution, keep the first activation short, so fewer people get stuck after install. Connect hot update and network verification before the user count grows. Set card duration for the scene: by day, by month, or longer, and leave batch time extension in the admin console. In the sales copy, skip “permanent” and “unlimited” if you cannot deliver them.
Accessibility and ADB are official system capabilities. What the script is used for has to be judged on its own. Stay away from gray-market work. Details are in the phone cluster-control compliance guide. Sell card keys under the rules of the platform and the market, and state after-sales and refunds up front. A hot-update request can carry basic device information such as deviceId and model. If you collect device information or user data, give notice and get authorization.
About EasyClick: A mobile automation script development platform covering three phone ecosystems: Android without root, iOS without jailbreak, and HarmonyOS. It also offers Apple script writing, Apple cluster control, Android cluster control, remote cloud control, and AI phone cluster control. → Explore all products
Ready to build it for real?
Every approach in this article can be built with EasyClick capabilities on iEasyClick — full documentation, developer tools and automation products, free to try.