如何使用谷歌现有类库?Android Studio导入libcore包遇阻求助
问题解决方案
嘿,我来帮你逐个搞定这些问题:
一、谷歌现有类库的使用方法
首先得明确你想用的是哪类谷歌类库——是Android Jetpack、Guava这类官方开源库,还是Android系统自带的谷歌系API?
- 如果是Jetpack或者Guava这类第三方库:
- 打开项目里的**模块级
build.gradle**文件(就是带app后缀的那个) - 在
dependencies代码块里添加对应依赖,比如用Guava就写:implementation 'com.google.guava:guava:32.1.3-android'(建议选最新稳定版,别用+号自动拉取,避免版本不稳定) - 点击右上角的
Sync Now同步项目,之后就能在代码里直接import并调用类库的API了
- 打开项目里的**模块级
- 如果是Android系统自带的谷歌类库(比如
androidx组件、com.google.android.material这类):
先确认项目已经迁移到AndroidX,之后大部分组件直接在代码里import对应包就行,少数组件需要在gradle里声明依赖(比如Material组件要加implementation 'com.google.android.material:material:1.11.0')
二、解决robovm-rt依赖无法解析的问题
你遇到的Failed to resolve错误,大概率是项目没配置robovm的仓库源,除了下JAR包,还有这几个靠谱办法:
- 配置robovm专属仓库:
打开项目根目录的build.gradle,在allprojects的repositories块里加上这两个仓库:
然后回到模块的maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://repo.robovm.org" }build.gradle,把依赖改成指定版本(别用+),比如compile 'org.robovm:robovm-rt:1.14.0',再同步项目试试- 配置robovm专属仓库:
- 检查网络代理:
如果你的网络需要代理,Android Studio可能连不上外部仓库,试试关掉代理,或者在File -> Settings -> Appearance & Behavior -> System Settings -> HTTP Proxy里配置正确的代理规则,确保能访问上面的仓库地址
- 检查网络代理:
- 清理缓存重启:
点击File -> Invalidate Caches / Restart,选Invalidate and Restart,清掉AS的缓存后再重新同步,有时候缓存出问题也会导致依赖解析失败
- 清理缓存重启:
三、获取InflaterInputStream读取的总字节数
想拿到输入流读取的总字节数,没必要去修改原生的InflaterInputStream源码(毕竟它属于系统libcore包,直接改不现实),最稳妥的方式是写个子类重写读取方法,自己统计:
比如创建一个CountingInflaterInputStream类:
import java.io.IOException; import java.io.InputStream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; public class CountingInflaterInputStream extends InflaterInputStream { private long totalBytesRead = 0; // 实现父类的所有构造方法 public CountingInflaterInputStream(InputStream in) { super(in); } public CountingInflaterInputStream(InputStream in, Inflater inf) { super(in, inf); } public CountingInflaterInputStream(InputStream in, Inflater inf, int size) { super(in, inf, size); } // 重写单个字节读取方法,统计字节数 @Override public int read() throws IOException { int readByte = super.read(); if (readByte != -1) { totalBytesRead++; } return readByte; } // 重写字节数组读取方法,统计字节数 @Override public int read(byte[] b, int off, int len) throws IOException { int bytesRead = super.read(b, off, len); if (bytesRead != -1) { totalBytesRead += bytesRead; } return bytesRead; } // 提供获取总字节数的方法 public long getTotalBytesRead() { return totalBytesRead; } }
之后在代码里用这个自定义类代替原生的InflaterInputStream,读取完成后调用getTotalBytesRead()就能拿到从输入流中读取的总字节数啦~
内容的提问来源于stack exchange,提问作者pebble
相关产品推荐
相关产品推荐

