安卓开发问题
Gradle版本升级
它有三个版本注意区别
- 集成开发环境插件的版本(例如232.7754.78)
- gradle本身的版本(例如5.6.4)
- 安卓项目的插件(AndroidGradlePlugin-AGP)版本(例如3.6.4)
Android Studio Flamingo| 后会出现Gradle Upgrade Assistant一个个版本升级
用Upgrade Assistant升级时会出现插件版本,Upgrade Assistant会自动同步 gradle/wrapper/gradle-wrapper.properties的配置gradle的版本
对照官方介绍的插件的版本和版本之间的关系检查,老项目测试已通过3.6.4
同步gradle尽量删除目前SDK Tools下所有的buildTools让gradle自己寻找正确的版本buildToolsVersion
尽量要升级高于4.0.0后进行==>AndroidX迁移、迁移、迁移
修复./gradlew的环境:
- 查看当前java版本,终端输入:java -version
- 查看存在的java sdk版本:/usr/libexec/java_home -V
- 查看gradle使用的java版本:./gradlew -v
- 复制需要更改的java sdk所在目录更新使用版本(用哪个版本复制其地址就行):export JAVA_HOME=/Users/seven/Library/Java/JavaVirtualMachines/java-1.8.0_342/Contents/Home
顺序执行构建指令,全部构建不能出错,出错需按提示修改配置文件:
./gradlew clean ./gradlew -q app:dependencies ./gradlew build --profile ./gradlew build --scan
安卓14权限适配
compileSdkVersion:告诉gradle用哪个SDK版本来编译,和运行时要求的版本号没有关系;(SDK maneger 中 SDK Platforms的安装对应的版本)
buildToolsVersion:版本需要大于等于compileSdkVersion;高版本的buildTools可以构建低版本编译的Android程序;(SDK maneger 中 SDK Tools的安装对应的版本)
targetSdkVersion:是 Android 系统提供前向兼容的主要手段;
android { compileSdkVersion 28//同步gradle时候注意用项目试图观察使用的是否都是这个版本 buildToolsVersion "32.0.2"//有多高升多高尽量大 useLibrary 'org.apache.http.legacy'//带上这个库升级要进行下步 defaultConfig { applicationId "com.xx.xx" minSdkVersion 23 targetSdkVersion 28 } } }
buildToolsVersion尽量最新,安卓14要求targetSdkVersion的版本最小28,所以compileSdkVersion最小也是28,防止使用org.apache.http.legacy出现闪退
<application android:usesCleartextTraffic="true">//这个属性要求minSdkVersion最小23 <uses-library android:name="org.apache.http.legacy" android:required="false"/> </application>
- compileSdkVersion尽量填最新的,以确保你能使用最新的API。
- buildToolsVersion尽量最高的,因为新的兼容旧的。
- minSdkVersion可以适量填小一点,以确保更多的人群能够使用。
- targetSdkVersion可以根据需要来,比如想要使用到新系统的一些新特性。
- 根据上述四个版本的特点,可以得出以下结论。
minSdkVersion <= targetSdkVersion <= compileSdkVersion
安卓13权限适配
防止H5发消息给APP闪退在AndroidManifest.xml增加一行
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
找回过期的库
最好找modules目录的原始aar文件(如果有)
/Users/alfred/.gradle/caches/modules-2/files-2.1/com.github.wildma/IDCardCamera/1.1.1/xxx/IDCardCamera-1.1.1.aar
没有只能拿之前编译成功的
.gradle/caches/transforms-2/files-2.1/xxx/picture_library-v2.0.1找到源文件直接压缩成zip改名aar,注意缓存里目录结构不同,要把.jar包文件放在最外层!!!
//implementation(‘com.github.LuckSiege.PictureSelector:picture_library:v2.0.1’) //Users/alfred/.gradle/caches/transforms-2/files-2.1/a1941803db8953e6e6e55ea2781d9485/picture_library-v2.0.1 implementation files(‘libs/picture_library-v2.0.1.aar’)
修改aar库:
- 在git上最好找到原java代码(找不到源码其次选择varaneckas.com/jad工具反编译class到java),同样的类在主项目复制成一摸一样的目录和文件。(https://github.com/skylot/jadx)
- clean并编译项目,在编译主项目过程中/build/intermediates/javac目录下找到编译的.class文件
- 替换aar库里的同名class文件
- 用https://github.com/java-decompiler/jd-gui 检查是否能正确读取class
- 其他class修改工具https://github.com/ingokegel/jclasslib