{"record":{"id":"1d40c95ce561c544","repo":"Tencent/tinker","slug":"libname-or-context-is-null-1d40c9","errorCode":null,"errorMessage":"libName or context is null!","messagePattern":"libName or context is null!","errorType":"exception","errorClass":"TinkerRuntimeException","httpStatus":null,"severity":"error","filePath":"tinker-android/tinker-android-lib/src/main/java/com/tencent/tinker/lib/tinker/TinkerApplicationHelper.java","lineNumber":256,"sourceCode":"     *\n     * @param applicationLike\n     */\n    public static void cleanPatch(ApplicationLike applicationLike) {\n        if (applicationLike == null || applicationLike.getApplication() == null) {\n            throw new TinkerRuntimeException(\"tinkerApplication is null\");\n        }\n        ShareTinkerInternals.cleanPatch(applicationLike.getApplication());\n    }\n\n    /**\n     * only support auto load lib/armeabi-v7a library from patch.\n     * in some process, you may not want to install tinker\n     * and you can load patch dex and library without install tinker!\n     * }\n     */\n    public static void loadArmV7aLibrary(ApplicationLike applicationLike, String libName) {\n        if (libName == null || libName.isEmpty() || applicationLike == null) {\n            throw new TinkerRuntimeException(\"libName or context is null!\");\n        }\n\n        if (TinkerApplicationHelper.isTinkerEnableForNativeLib(applicationLike)) {\n            if (TinkerApplicationHelper.loadLibraryFromTinker(applicationLike, \"lib/armeabi-v7a\", libName)) {\n                return;\n            }\n\n        }\n        System.loadLibrary(libName);\n    }\n\n\n    /**\n     * only support auto load lib/armeabi library from patch.\n     * in some process, you may not want to install tinker\n     * and you can load patch dex and library without install tinker!\n     */\n    public static void loadArmLibrary(ApplicationLike applicationLike, String libName) {","sourceCodeStart":238,"sourceCodeEnd":274,"githubUrl":"https://github.com/Tencent/tinker/blob/1b7ea02c239840f563ea64fb5bd286eb98d4011e/tinker-android/tinker-android-lib/src/main/java/com/tencent/tinker/lib/tinker/TinkerApplicationHelper.java#L238-L274","documentation":"Thrown by TinkerApplicationHelper.loadArmV7aLibrary when libName is null/empty or the ApplicationLike is null. This helper loads lib/armeabi-v7a .so files from the patch before Tinker is installed; it needs both a concrete library name and a context to look in. The guard catches wiring mistakes instead of letting System.loadLibrary fail cryptically.","triggerScenarios":"Calling loadArmV7aLibrary(appLike, null), with an empty string, or passing a null ApplicationLike — e.g. System.loadLibrary(\"mylib\") replaced by the tinker helper in a class where the ApplicationLike was not provided.","commonSituations":"Migrating native-lib loading to support patches and forgetting to inject the ApplicationLike; calling from static initializers of native-backed classes (SoLoader-style init) that run before the ApplicationLike is available.","solutions":["Pass a non-empty libName exactly as in System.loadLibrary (no 'lib' prefix, no '.so' suffix).","Inject the ApplicationLike into the class performing native loads.","If the ApplicationLike may be absent (e.g. tinker disabled builds), guard and fall back to System.loadLibrary."],"exampleFix":"// before\nTinkerApplicationHelper.loadArmV7aLibrary(null, \"mylib\");\n\n// after\nif (appLike != null && !TextUtils.isEmpty(\"mylib\")) {\n    TinkerApplicationHelper.loadArmV7aLibrary(appLike, \"mylib\");\n} else {\n    System.loadLibrary(\"mylib\");\n}","handlingStrategy":"validation","validationCode":"if (appLike == null || appLike.getApplication() == null || libName == null || libName.trim().isEmpty()) {\n    System.loadLibrary(libName == null || libName.trim().isEmpty() ? \"mylib\" : libName);\n    return;\n}\nTinkerApplicationHelper.loadArmV7aLibrary(appLike, libName);","typeGuard":"static boolean canLoadFromTinker(ApplicationLike like, String libName) {\n    return like != null && like.getApplication() != null\n        && libName != null && !libName.trim().isEmpty();\n}","tryCatchPattern":null,"preventionTips":["Inject the ApplicationLike into every class that loads native libraries.","Validate libName (non-empty, no 'lib' prefix, no '.so' suffix) before calling.","Keep System.loadLibrary as the explicit fallback when tinker is unavailable."],"tags":["tinker","android","null-argument","native-lib","armeabi-v7a"],"backgroundTag":null,"analyzedSha":"1b7ea02c239840f563ea64fb5bd286eb98d4011e","analyzedAt":"2026-08-14T15:16:52.110Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}