1. 不能下载依赖包
替换build.gradle中的repo地址为国内镜像地址,解决依赖包下载失败的问题
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/jcenter'}
2. 报错:You have not accepted the license agreements of the following SDK components需要先接受License
执行命令:Sdkmanager --licenses
结果执行Sdkmanager --licenses 报错,尝试./sdkmanager --version也同样报错(我在这里耗费的大量的时间):
原因:java版本不对,由java1.7改为1.8后解决
服务器上已有java8了,只不过默认配置的环境变量指向的是java1.7,临时将环境变量指向java1.8
export JAVA_HOME=/opt/jdk/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[18:44 root@cc-test-201 bin]# ./sdkmanager --version
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/SdkManagerCli : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
仍然报错:Sdkmangager 没有--licenses 命令
原因:sdk版本太低,升级sdk版本即可解决
1. 用android命令:升级sdk
cd 相关地址/android-sdk-linux/tools
android list sdk --all
android update sdk -u -a -t 相应数字
2. 用sdkmanager命令:安装指定的sdk组件
cd 相关地址/android-sdk-linux/tools/bin
./sdkmanager --list
./sdkmanager "platform-tools" "build-tools;28.0.3" "platforms;android-28"
另有网友提出低版本的sdk存在bug,需要通过以下方法修复:
We are going to apply a fix in sdkmanager. It is a shell script. It is located at $android_sdk/tools/bin, where $android_sdk is where you unzipped the Android SDK.
- Open sdkmanager in your favorite editor.
- Locate the line which sets the DEFAULT_JVM_OPTSvariable. In my copy, it is at line 31:
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"' - Append the following options to the variable: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Please pay attention to the quotes. In my copy, the line becomes:
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee' - Save the file and quit the editor.
- Run the command again.
3. 然后遇到一个错误:Execution failed for task ':checkReleaseDuplicateClasses'
# 解决思路就是修改build.gradel,排除重复引用
1 本来想通过exclude的方法排除引用,但是这个只能排除模块,不能单独排除某个class,但是如果整个模块排除,又会导致排除的太多了,导致编译时报错找不到相应的依赖
implementation('com.github.hotchemi:permissionsdispatcher:3.1.0') {
// if you don't use android.app.Fragment you can exclude support for them
exclude module: "support-v13"
}
kapt "com.github.hotchemi:permissionsdispatcher-processor:3.1.0"
2 另外有网友说把编译选项由implementation换成compileOnly,试过了,是不行的
3 想到为什么只有permissionsdispatcher会出错?是不是permissionsdispatcher版本的问题?尝试将permissionsdispatcher版本由3.1.0换为3.3.1后,重复引用的报错消失了,so easy,是不是,但是前面花费了我大量的时间进行尝试
4. 最后一个错误是编译报错:
考虑是cmake版本太高,或ndk版本太高所致
最终将ndk降级替换为android-ndk-r16b解决
解决了这些问题后,终于可以将android的包给打出来了