Android共享库中无法解析符号'Log',无需导入包如何输出到Logcat?
问题根因
你当前的模块使用的是java-library插件,属于纯Java/Kotlin库,编译环境没有内置Android SDK的相关类,所以自然找不到android.util.Log,哪怕手动加import也没用。
可行方案
方案1:自定义日志抽象层(最优,符合跨平台要求)
这个方案不需要你的共享库依赖Android SDK,完全保留纯Java库的跨平台属性,同时在Android端运行时自动输出到Logcat:
- 第一步:在共享库内定义日志接口,比如:
public interface Logger { void d(String tag, String msg); void i(String tag, String msg); void w(String tag, String msg); void e(String tag, String msg); // 按需添加其他日志级别方法 }
- 第二步:在共享库内写一个日志工具类,持有这个接口的实现,供内部调用:
public class LogUtils { private static Logger sLogger; // 给外层注入日志实现的入口 public static void setLogger(Logger logger) { sLogger = logger; } public static void d(String tag, String msg) { if (sLogger != null) { sLogger.d(tag, msg); } } // 其他级别对应的静态方法同理 }
- 第三步:在Android端的应用/穿戴设备应用初始化的时候,注入
android.util.Log的实现:
LogUtils.setLogger(new Logger() { @Override public void d(String tag, String msg) { Log.d(tag, msg); } @Override public void i(String tag, String msg) { Log.i(tag, msg); } @Override public void w(String tag, String msg) { Log.w(tag, msg); } @Override public void e(String tag, String msg) { Log.e(tag, msg); } });
- 第四步:如果后续要对接iOS端,只需要在iOS侧注入对应平台的日志实现即可,共享库的代码不需要做任何修改,完全符合跨平台复用的要求。
方案2:直接输出到System.out(临时快速方案)
Android的Logcat默认会捕获System.out和System.err的输出,对应Logcat的INFO和ERROR级别,你不需要依赖任何Android SDK的类,直接在共享库中调用即可:
// 对应Logcat的INFO级别 System.out.println("tag: 日志内容"); // 对应Logcat的ERROR级别 System.err.println("tag: 错误日志内容");
这个方案的缺点是不支持自定义日志级别,日志格式也比较固定,适合临时调试用。
方案3:将模块改为Android Library(不推荐,不符合你的跨平台需求)
如果你放弃跨平台复用的需求,可以把build.gradle的配置改成Android库,就能直接使用android.util.Log了:
// 替换原来的apply plugin: 'java-library' apply plugin: 'com.android.library' android { compileSdk 33 // 按需选择你需要的版本 defaultConfig { minSdk 21 // 匹配你的穿戴/移动端的最低支持版本 } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) }
这个方案会让你的库变成Android专属,无法给iOS端复用,不匹配你的需求,所以不推荐。
内容的提问来源于stack exchange,提问作者lcj
相关产品推荐
相关产品推荐

