介绍
从git上拉取的ijkPlayer
的源码是一个完整的Android
项目,那么就应该能够导入到Android Studio
之中。
而我在导入过程中碰见了不少的问题。本篇就记录一下我的导入过程中的问题以及处理吧。
最终目标是能够直接采用Android Studio
进行编译ijkPlayer
的SO
文件吧。
1. Could not determine java version from '11.0.8'.
出现这个问题的主要原因在于项目中使用的Gradle
版本太低了。
classpath 'com.android.tools.build:gradle:2.1.3'
这个版本在你的Android Studio
所支持的最低版本不兼容。需要我们升级项目中gradle
版本。
解决方法
Could not determine java version from '11.0.8'.-错误解决 (zinyan.com)
我在这个文章中有介绍如何解决。
把这个地方改为4.8.1
版本就可以了。
为什么我说4.8.1 是因为错误警告中,告诉了我需要升级gradle-wrapper到4.8.1 version。 你的错误如果不是这个数,你就升级到错误日志提示的版本就可以了。
2. Could not initialize class com.android.sdklib.repositoryv2.AndroidSdkHandler
这个问题的意思就是说,当前无法初始化AndroidSdkHandler
类。
我们查询详细的Build
错误日志会显示:
* What went wrong:
A problem occurred configuring project ':ijkplayer-arm64'.
> Failed to notify project evaluation listener.
> Could not initialize class com.android.sdklib.repositoryv2.AndroidSdkHandler
* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.
出现这个类找不到的原因,我们首先得弄明白com.android.sdklib.repositoryv2.AndroidSdkHandler
这个类是从哪里获取的。
这个类其实是从项目目录的build.gradle
文件中的classpath 'com.android.tools.build:gradle:2.1.3'
指向的 gradle
库里面的类。
但是现在最新的Android Studio
不在支持3.4
以下的tools
工具了。所以ijkPlayer项目中配置的2.1.3
版本不能导入。我们需要升级该版本才行。
解决方法
由于从老版本往上升级。我没有用最新的,就用了个3.6.4
版本。
classpath "com.android.tools.build:gradle:3.6.4"
如果你的Android Studio
更高,不支持3.6.4
。那你可以继续修改这个版本吧。
3. Could not find com.android.tools.build:gradle:3.6.4.
我们配置完Gradle.3.6.4
之后提示下载失败
我们其他项目都可以使用3.6.4
版本。但是为什么就它不行了呢?
那是因为jcenter
库的问题。
jcenter
仓库关闭了,我们需要迁移到google()
和 mavenCentral()
解决方法
buildscript {
repositories {
// jcenter()
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:3.6.4"
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
但是从google
和mavenCentral
仓库下载的话。速度会受到比较大的影响,因为它们的仓库地址都在国外。
你如果下载不成功,可以试试仓库地址切换到国内阿里云的镜像地址。
切换方法可以参考我的这个文章 :Android Studio Maven 仓库切换到阿里云 (zinyan.com)。
如果你下载成功,那不用切换仓库也没关系了。
4. gradle-bintray-plugin 1.7下载失败。
我们继续构建的话,会出现以下错误,Android Studio
从两个地方去下载gradle-bintray-plugin
都找不到,下载失败了。
简直一波三折啊。
这个地方很简单,我们可以删除掉这个plugin
插件。因为它的作用实际就是将我们的项目编译结果上传到jcenter
仓库。这个仓库都混不下去了。我们完全不需要这个插件啊。
解决方法
删除掉 gradle-bintray-plugin
buildscript {
repositories {
// jcenter()
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:3.6.4"
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
// classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
5. Minimum supported Gradle version is 5.6.4. Current version is 4.8.1.
我们编译的时候,会提示Gradle Version
版本不对。 最低只支持5.6.4
我们在第一步中改的4.8.1
版本太低。
那么为什么当初改4.8.1
版本的时候不会报错?那是因为改它的时候,android.tools.build
版本还是老版本的原因。
这两个地方标注的其实是两个不同的插件。但是左边的Android Tools.build.Gradle
插件是Android
官方自己基于右边的Gradle
版本做的一个定制扩展版本。左边的必须依赖右边的Gradle
。
两者之间有一个最低版本兼容的问题。当然从2021.1
版本之后这两个插件的版本号被统一了。
针对这两个的问题,我有一个文章详细介绍了:Android Studio 中的Gradle版本介绍 (zinyan.com) 可以通过这个进行了解。
解决方法
修改 gradle-wrapper.properties
文件中的版本号为5.6.4
到这一步,项目终于能够Build
了。
效果图如下
6. Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed soon. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
Affected Modules: ijkplayer-arm64, ijkplayer-armv5, ijkplayer-armv7a, ijkplayer-example, ijkplayer-exo, ijkplayer-java, ijkplayer-x86, ijkplayer-x86_64
这个信息就不是错误,主要是警告。因为在更新的Gradle
版本下,compile
指令已经被废弃淘汰了。
需要我们替换每个moduile
里面的compile
改为api
或者 implementation
解决方法
老的写法:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//改为
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
那么如果碰见all32Compile
时候该怎么改?
all32Compile project(':ijkplayer-armv5')
all32Compile project(':ijkplayer-armv7a')
all32Compile project(':ijkplayer-x86')
改为:
all32Implementation project(':ijkplayer-armv5')
all32Implementation project(':ijkplayer-armv7a')
all32Implementation project(':ijkplayer-x86')
这个all32
其实就是在上面定义的 productFlavors
。
它决定了每个Flavors
依赖不一样的项目而已。
全部替换完毕后,我们Build
项目,就没有这个错误了。
7. The specified Android SDK Build Tools version (25.0.3) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle Plugin 3.6.4.
警告信息:
The specified Android SDK Build Tools version (25.0.3) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle Plugin 3.6.4.
Android SDK Build Tools 28.0.3 will be used.
To suppress this warning, remove "buildToolsVersion '25.0.3'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools.
Remove Build Tools version and sync project
Affected Modules: ijkplayer-arm64, ijkplayer-armv5, ijkplayer-armv7a, ijkplayer-example, ijkplayer-exo, ijkplayer-java, ijkplayer-x86, ijkplayer-x86_64
这个问题很简单。它的介绍内容已经讲明白了。
因为我们的 Android Gradle Plugin
插件的版本是3.6.4
。它支持的最低Android SDK Build Tools
版本是28.0.3
而这个版本是 buildToolsVersion
配置的版本号。
我们修改一下 compileSdkVersion
和buildToolsVersion
版本号就可以了。
解决方法
在项目最外层的build.gradle
文件中修改ext{}
里面标注的版本号就可以了。
我们修改到这一步的时候,也只是能够用Android Studio
阅读代码而已。
由于篇幅有限。本篇就先到这里吧。下一篇再继续处理各种警告问题。
如果找不到,可以通过 ijkplayer (zinyan.com) 分类。查询到本站关于ijkplayer
中的全部内容。
评论区