Blankj/AndroidUtilCode

:fire: Android developers should collect the following utils(updating).

6
Hotness score
19
Reliability score
33,654
Stars
almost 10 years
Age
0
Published reviews
0
Questions

Scores

Hotness and reliability

The two headline scores, measured daily, with 30, 90, and 180 day views.

Hotness score

Jul 19, 2026

Current6

Previous2

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Hotness formula

40% Hot today + 40% Hot this week + 20% Breakout.

  • 40% Hot today: 7
  • 40% Hot this week: 6
  • 20% Breakout: 1
  • Stars gained: 1d: 1
  • Stars gained: 7d: 1
  • Stars gained: 14d: 1
  • Stars gained: 30d: 0
  • Stars gained: 90d: 0

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Jul 19, 2026

Current19

Previous19

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Reliability formula

30% Continuity + 30% Closure + 20% Shipping + 10% Liveness + 10% Support burden.

  • 30% Continuity: 6
  • 30% Closure: 30
  • 20% Shipping: 0
  • 10% Liveness: 0
  • 10% Support burden: 82

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

Reliability breakdown

What drives the reliability score

Component scores measured daily from GitHub activity (2026-04-29).

Continuity30% of headline6

Activity on 1 of 90 tracked days in the last 90 and 0 of 30 in the last 30.

Closure30% of headline30

Merged 0 of 0 PRs opened and closed 2 of 3 issues opened over the last 90 tracked days — PR flow carries 55% of this component, issue flow 45%.

Shipping20% of headline0

0 releases in the last 180 days, 0 in the last 90 and 0 in the last 30 — a steady cadence scores highest.

Liveness10% of headline0

Last push 704 days ago — freshness decays as pushes age (roughly halves every 83 days without a push).

Support burden10% of headline82

Open-issue load isn't tracked for this repo yet.

Adoption confidence4

Modeled — how confidently teams are adopting this repo. Stargazers

Maintenance quality11

Modeled from PR/issue responsiveness and upkeep signals. Activity pulse

Risk score76

Modeled — lower is better; adoption and continuity risk. Repository

Stays active (30d)0%

Modeled chance the repo stays active over 30 days. Activity pulse

Stays active (90d)5%

Modeled chance the repo stays active over 90 days. Activity pulse

Release rhythm (180d)0

Regularity of releases over the last 180 days. Releases

Maintainer bus risk (90d)89%

Modeled — lower is better; concentration of commits in few maintainers. Contributors graph

Measured history

Project metrics

Weekly GitHub totals with 30, 90, and 180 day views.

Weekly star gains

Jul 19, 2026

Current0

Previous0

Weekly star gains

10-34-78
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Cumulative stars

Jul 19, 2026

Current33,653

Previous33,653

Cumulative total

33,70816,8540
Full metrics details

Running total of the GitHub GraphQL stargazer count over time (not weekly deltas), reconstructed from starredAt events and totalCount in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Jun 28, 2026

Current0

Previous0

Weekly total

320
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

163 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Jun 28, 2026

Current0

Previous0

Weekly total

210
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

163 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Jun 28, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

163 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Jun 28, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

163 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Jun 28, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

163 observed daily rows. Missing days are not fabricated.

DateValue

Issue close ratio (daily)

Jun 4, 2026

Current0.67

Daily ratio — a gap means nothing was opened that day

How this works: each day's value is issues closed that day ÷ issues opened that day. Days when nothing was opened render as gaps — never a rolling average or a made-up zero. Values above 1 mean the project closed more issues than arrived that day.

1.000.500.00
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

4 observed daily rows. Missing days are not fabricated.

Per-day formula: issues closed that day ÷ issues opened that day; blank when nothing was opened (a gap, not a zero).

DateIssues openedIssues closedStored score

Project Overview

AndroidUtilCode is a Java utility library for Android that bundles several hundred helper methods across 200+ purpose-built utility classes. If you have ever written boilerplate to get screen density, check network connectivity, format a date, or hash a string, this library has already done it for you.

Blankj started the project in 2016, and it grew to 33,000+ stars, making it one of the most-starred Android utility collections on GitHub. As of mid-2026 the commit cadence has slowed, with most utility classes stable and only occasional additions. Treat it as a mature, low-churn dependency rather than a fast-moving framework. The license is Apache 2.0, so commercial use is unrestricted.

Key Challenges Addressed

Android development generates a lot of repeated low-level code. AndroidUtilCode targets the specific pain points:

  • Context threading everywhere: Many Android APIs require a Context. AndroidUtilCode's Utils.init(app) registers the Application context once so every utility method can access it internally — you stop threading Context through every call site.
  • Permission boilerplate: Checking and requesting runtime permissions across Android versions requires version guards and callback management. PermissionUtils handles the branching for you.
  • Inconsistent device APIs: Screen size, density, navigation bar height, and status bar height vary by device and OS version. ScreenUtils, BarUtils, and DeviceUtils encapsulate the correct detection logic per Android version.
  • Common but unsafe operations: File I/O, encryption, and shell execution have well-known failure modes — encoding mismatches, wrong key lengths, missing escaping. The utility classes address these consistently.
  • Toast and Log management: Android's Toast and Log APIs need lifecycle awareness and thread-safety. ToastUtils routes to the main thread automatically; LogUtils adds level filtering and output formatting.

Getting Started

Add the JitPack repository to your root build.gradle:

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

Then add the dependency in your app module:

dependencies {
    implementation 'com.blankj:utilcodex:1.31.1'
}

Initialize in your Application class:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Utils.init(this);
    }
}

After that, every utility class is accessible without passing Context.

Sharp edges to know before you go further:

  • If you call any utility before Utils.init() completes, you get a NullPointerException deep inside the library with no message pointing to the missing initialization. Always initialize in Application.onCreate(), not in an Activity or Fragment.
  • If you use R8 with aggressive shrinking, some reflection-dependent classes like AppUtils and PhoneUtils can lose methods silently. Run your full test suite against a release build before shipping.
  • ShellUtils.execCmd() runs arbitrary shell commands as the current user. Passing unsanitized user input to it is a command injection vulnerability. Never pass user-controlled strings to that method.

Features and Use Cases

AndroidUtilCode is organized by domain. Here are the categories worth knowing:

String and data

StringUtils, RegexUtils, EncodeUtils, EncryptUtils, and ConvertUtils cover encoding, symmetric and asymmetric encryption (AES, DES, RSA), hashing (MD5, SHA family), base64, and common string transformations. Useful for building local auth flows or display formatting without pulling in separate crypto libraries.

Files and storage

FileUtils, PathUtils, SDCardUtils, and CacheDiskStaticUtils handle reading, writing, copying, and deleting files across internal and external storage. The cache utilities implement a size-bounded disk cache backed by plain files — good for storing small blobs without introducing SQLite overhead.

UI helpers

KeyboardUtils, ScreenUtils, BarUtils, SizeUtils, and ViewUtils handle pixel/dp conversion and window insets that nearly every Android UI needs. Particularly useful when building layouts that must account for soft navigation bars across device generations.

App and device information

AppUtils exposes version name, version code, installed package info, and APK export. DeviceUtils gives manufacturer, model, and SDK version in a consistent format — handy for enriching crash reports.

Network and connectivity

NetworkUtils lets you check connection type (WiFi, mobile, offline) and test basic reachability. It is not an HTTP client — pair it with OkHttp or Retrofit for actual requests.

Threading

ThreadUtils provides named thread pools and a main-thread poster. It handles most scheduling needs without requiring RxJava.

Ecosystem and Dependencies

AndroidUtilCode has minimal mandatory dependencies. Most of the library is pure Java with Android SDK calls — there is no forced inclusion of OkHttp, Retrofit, or RxJava, so your APK does not bloat automatically.

In practice, projects using AndroidUtilCode also reach for:

  • Glide for image loading — AndroidUtilCode's ImageUtils covers bitmap manipulation but not disk-cached async loading from URLs.
  • Timber alongside LogUtils when you need structured log trees and pluggable backends like Crashlytics.
  • LeakCanary in debug builds for memory leak detection — nothing in AndroidUtilCode covers this.

If you are migrating to Kotlin, AndroidX KTX extension functions overlap significantly with AndroidUtilCode's UI and context utilities (dp.toPx(), Context.getColor(), etc.). On a greenfield Kotlin project, audit KTX coverage before adding AndroidUtilCode as a dependency.

Architectural Overview

The library uses a static-method, utility-class pattern throughout. Every class is a final class with a private constructor and only static methods. The shared Application context registered at Utils.init() is stored in a static field and accessed internally by all utility classes.

This design has two practical consequences:

No dependency injection required. You can call NetworkUtils.isConnected() from a ViewModel, a background service, or a broadcast receiver without constructor injection. Convenient, but it also means you cannot swap implementations for testing.

Unit testability is limited. The static design makes mocking Android APIs harder. If testability matters to your team, wrap the specific utilities you depend on behind an interface and inject that interface instead.

The library ships as a single AAR. There is no multi-module Gradle setup that lets you pull in only the file utilities or only the encryption classes. R8 and ProGuard will strip unused code at build time, but you accept the full transitive dependency footprint at the Gradle level.

Pros and Cons

Pros

  • Covers an unusually wide range of Android utility needs in one dependency, reducing the number of small single-purpose libraries to track.
  • Consistent API style across all utility classes: static methods, no configuration objects, predictable naming.
  • Apache 2.0 license with no commercial restrictions.
  • Inline Javadoc on every public method, with documentation available in both English and Chinese.
  • Single initialization call — no per-utility setup.

Cons

  • Static-method design makes unit testing difficult. Utility calls are not mockable without PowerMock or Mockito inline mocking, both of which add test build complexity.
  • Commit cadence has slowed since 2023. Bug fixes land, but new Android API coverage — predictive back gestures, Android 15 permission models — may lag behind platform releases.
  • Not Kotlin-first. The API works from Kotlin but offers no extension functions, coroutine-aware methods, or Flow integration. The static Java API feels out of place in idiomatic Kotlin codebases.
  • No modular dependency — you take the whole library even if you use three utility classes. R8 mitigates this but the footprint is visible at dependency resolution time.
  • ShellUtils and RootUtils include shell execution helpers that introduce security risk if misused. There is no built-in input sanitization.

Comparison and Alternatives

Measured 90-day trends for this project and its alternatives.

GitHub stars

Weekly star gains

51,4960-51,496
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

AndroidUtilCode

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Weekly total

320
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

AndroidUtilCode

GitHub API observation. Historical values render only when the source provides a real observation for that day.

163 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub API observation. Historical values render only when the source provides a real observation for that day.

144 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Weekly total

34170
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

AndroidUtilCode

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

163 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

144 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Weekly total

29150
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

AndroidUtilCode

GitHub API observation. Historical values render only when the source provides a real observation for that day.

163 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub API observation. Historical values render only when the source provides a real observation for that day.

144 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Weekly total

29150
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

AndroidUtilCode

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

163 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

144 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Weekly total

26130
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

AndroidUtilCode

GitHub API observation. Historical values render only when the source provides a real observation for that day.

163 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub API observation. Historical values render only when the source provides a real observation for that day.

144 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed pull request ratio

Weekly average

100500
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

AndroidUtilCode

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed issues ratio

Weekly average

100500
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

AndroidUtilCode

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Releases

Weekly total

320
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

AndroidUtilCode

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
google/guava

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
Timber

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
Glide

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
LeakCanary

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue

Hotness score

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

AndroidUtilCode

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
google/guava

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Timber

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Glide

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
LeakCanary

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

AndroidUtilCode

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
google/guava

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Timber

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Glide

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
LeakCanary

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

No single alternative covers AndroidUtilCode's full breadth, but these libraries overlap substantially and are worth evaluating before committing:

Project Repo Hotness (~6mo) PRs merged (~6mo) Star growth (~6mo)
AndroidUtilCode https://github.com/Blankj/AndroidUtilCode 6.28 0 266
Guava https://github.com/google/guava 86.54 336 928
Timber https://github.com/JakeWharton/timber metrics pending 0 10
Glide https://github.com/bumptech/glide 6.65 47 342
LeakCanary https://github.com/square/leakcanary 70.30 7 359
PermissionsDispatcher https://github.com/permissions-dispatcher/PermissionsDispatcher metrics pending 0 metrics pending

google/guava is the best overall alternative. It is actively maintained by Google, has comprehensive test coverage and well-known stability guarantees, and works across both Android and JVM targets — making it the safer long-term dependency even though it omits Android-specific helpers like BarUtils and ToastUtils.

Conclusion

AndroidUtilCode is the right choice for Java Android projects that need broad utility coverage without juggling a dozen single-purpose libraries. Java teams maintaining large existing codebases will find the most immediate return — the official repository documents every available method with inline Javadoc.

Do not call any utility method before Utils.init(this) runs in your Application class — the failure is a silent NullPointerException with no stack frame pointing at the missing initialization call. Start by adding Utils.init(this) to your Application, then validate it immediately by calling AppUtils.getAppVersionName() and checking the return value before building anything else on top.

Join the conversation

Reviews · Questions · Posts

Share what you know about AndroidUtilCode — write a review from your real experience, ask an implementation question, or publish a post about how you use it.

Share your experience

Write or update your review

Explain what worked, what broke down, and what another team should know before adopting AndroidUtilCode.

Write your review now — it saves locally and publishes automatically after you sign in.

Rating
Positive attributes
Negative attributes

Project Q&A

Questions and answers

Browse implementation threads tied directly to Blankj/AndroidUtilCode. Each question links through to the full answer page.

Q&A No threads yet

Be the first to ask how teams run AndroidUtilCode in production. Every question you post becomes a durable, searchable answer page other developers can find.

Ask the first question

Related posts

Posts tagged with the same topics

These posts come from the same topic surface as this repo, so readers can move from project evaluation into practical writeups and migration notes without leaving context.

Posts No topic-linked posts yet

Share how your team uses AndroidUtilCode — a migration note, an architecture writeup, or a comparison. Your post reaches everyone browsing these same topics.

Write the first post
Get a weekly email with the hottest new projects in the Mobile Development and Java world.
No Spam. Unsubscribe easily at any time.

Copyright 2018-2026 Awesome Open Source.  All rights reserved.