记一次配置jenkins实现android app自动打包

本文介绍了在Android开发中遇到的常见问题及解决方案,包括更改Gradle仓库地址以解决依赖下载失败,处理SDK组件许可协议,解决因Java版本不兼容导致的Sdkmanager命令错误,以及修复编译错误如重复类和NDK版本过高问题。通过这些步骤,成功地打包了Android应用。
摘要由CSDN通过智能技术生成

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.

  1. Open sdkmanager in your favorite editor.
  2. 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"'
  3. 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'
  4. Save the file and quit the editor.
  5. 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的包给打出来了

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值