alibaba/ARouter · error · RuntimeException

String.format(tipText, key)

Error message

String.format(tipText, key)

What it means

UniqueKeyTreeMap is an internal ARouter map that guarantees unique keys for route/interceptor/provider indexing. put() throws a RuntimeException when the key already exists, formatting the map's tipText (an exception template like 'Path already registered, please check the repeated route!') with the duplicate key.

Solutions

  1. Search the codebase for a duplicate @Route(path=...) value and rename one path uniquely
  2. Run gradle clean to purge stale generated ARouter group classes from old builds
  3. If two modules must share a path, unify it in one module and depend on it from the other

Example fix

// before
@Route(path = "/user/detail")
public class UserDetailActivity {...}
// (another module)
@Route(path = "/user/detail")
public class UserDetail2Activity {...}
// after
@Route(path = "/user/detail")
public class UserDetailActivity {...}
// (another module)
@Route(path = "/user/detail2")
public class UserDetail2Activity {...}
Defensive patterns

Strategy: validation

Validate before calling

Set<String> seen = new HashSet<>();
for (RouteMeta m : allRouteMetas()) {
    if (!seen.add(m.getPath())) {
        throw new IllegalStateException("Duplicate route path registered: " + m.getPath());
    }
}

Try / catch

try {
    arouter.init(application);
} catch (HandlerException e) {
    if (e.getCause() instanceof RuntimeException && e.getMessage().contains("already registered")) {
        Log.e(TAG, "Duplicate route path detected, see cause", e);
    }
}

Prevention

When it happens

Trigger: Registering two RouteMeta entries with the same path/class during Warehouse loading — e.g. two @Route(path="/x/y") annotations with the same path, duplicated route classes generated by the compiler plugin, or LogisticsCenter.init being run twice over the same class set.

Common situations: Two modules declare the same route path; a stale generated class from an old build is still on the classpath after refactoring a path; multi-module projects where different teams collide on a path prefix.

Related errors


AI-assisted analysis of alibaba/ARouter@84f451d244 (2026-09-06). Data as JSON: /api/errors/4822ff39e05d1aab. Report an issue: GitHub.

Appendix: source

Thrown at arouter-api/src/main/java/com/alibaba/android/arouter/base/UniqueKeyTreeMap.java:24

 * TreeMap with unique key.
 *
 * @author zhilong <a href="mailto:zhilong.lzl@alibaba-inc.com">Contact me.</a>
 * @version 1.0
 * @since 2017/2/22 下午5:01
 */
public class UniqueKeyTreeMap<K, V> extends TreeMap<K, V> {
    private String tipText;

    public UniqueKeyTreeMap(String exceptionText) {
        super();

        tipText = exceptionText;
    }

    @Override
    public V put(K key, V value) {
        if (containsKey(key)) {
            throw new RuntimeException(String.format(tipText, key));
        } else {
            return super.put(key, value);
        }
    }
}

View on GitHub (pinned to 84f451d244)