填坑,填不完,根本填不完
文章目录
-
- [1. 报错信息:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1a7525c8](#1. 报错信息:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1a7525c8)
- [2. Package Name not found in /******/app/src/main/AndroidManifest.xml, and namespace not specified. Please specify a namespace for the generated R and BuildConfig classes via android.namespace in the module's build.gradle file like so:](#2. Package Name not found in /******/app/src/main/AndroidManifest.xml, and namespace not specified. Please specify a namespace for the generated R and BuildConfig classes via android.namespace in the module's build.gradle file like so:)
- 3.项目包名重命名
- [4. getResources().getColor(int)' 已经过时了](#4. getResources().getColor(int)‘ 已经过时了)
- [5. android:windowIsTranslucent=true导致页面转场动画穿透](#5. android:windowIsTranslucent=true导致页面转场动画穿透)
- [6. Android自定义打包名称](#6. Android自定义打包名称)
- [7. 检查和更新Android gradle插件](#7. 检查和更新Android gradle插件)
- [8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取](#8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取)
- 9.组合文字设置:字体、颜色、下划线、图片等
1. 报错信息:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @1a7525c8
现象:此问题出现在java9以上版本,打包时Android studio报错
在Java 9及更高版本中,模块化系统引入了严格的封装规则。当你打包项目为JAR并尝试运行时遇到类似"module java.base does not 'opens java.lang' to unnamed module"的错误,这是因为某个类或包试图反射访问java.base模块中的非公开API,而未命名模块(即不是以模块形式构建的JAR)没有被授予这种权限。
解决:将以下内容添加到gradle.properties.
java
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
参考:【Error accessible: module java.base does not "opens java.lang" to unnamed module @3ac3fd8b】
2. Package Name not found in /******/app/src/main/AndroidManifest.xml, and namespace not specified. Please specify a namespace for the generated R and BuildConfig classes via android.namespace in the module's build.gradle file like so:
原因:未在清单文件中设置包名或者在gradle中命名空间,package 和 nameSpace 同样效果
解决:配置包名即可
3.项目包名重命名
- 修改包名设置,清单文件,gradle
- 修改包名目录,直接修改无效
新建目录,在整体迁移 - 修改R文件名称
例如:MainActivity中import com.ang.cafe.R 修改为 import com.ang.iot.cafe.R
AndroidStudio --->Edit --->Find ---> Replace in Path 替换既可;
全局替换,快捷键:Ctrl + Shift + R
4. getResources().getColor(int)' 已经过时了
使用最新官方推荐的方法:
textView.setTextColor(ContextCompat.getColor(mContext,R.color.black))
5. android:windowIsTranslucent=true导致页面转场动画穿透
此方法是theme里面的属性设置,将window设置成透明,会导致activity转场动画穿透,看起来效果就是页面闪烁
6. Android自定义打包名称
java
android {
//....
applicationVariants.all{ variant ->
variant.outputs.all{
def createTime = new Date().format("MMddHHmm", TimeZone.getTimeZone("GMT+08:00"))
def fileName = "YourProjectName_${defaultConfig.versionName}_${buildType.name}_${createTime}.apk"
outputFileName = fileName
}
}
//....
7. 检查和更新Android gradle插件
确保在 Demo/gradle/wrapper/build.gradle 文件中设置正确的 AGP(Android Gradle Plugin 的缩写,中文全称是 Android Gradle 插件) 版本。
java
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.2.0'
}
}
8. Android 蓝牙无法连接或无法获取蓝牙权限是否获取
ps:Android 12 一加手机,检查手机权限时,蓝牙已经授权,但是无法获取蓝牙的授权状态依然是false。
从Android 12开始,过去的蓝牙权限被拆分成了3个新的权限,并且全都是运行时权限(需要动态申请):
BLUETOOTH_SCAN 用于使用蓝牙扫描附件其他的蓝牙设备
BLUETOOTH_ADVERTISE 用于允许当前的设备被其他的蓝牙设备所发现
BLUETOOTH_CONNECT 用于连接之前已经配对过的蓝牙设备
因此maxSdkVersion="30"以上的权限需要申请新增的蓝牙权限,上述3个权限属于组权限,理论上申请一个即可。
Android连接蓝牙设备问题(android.permission.BLUETOOTH)
9.组合文字设置:字体、颜色、下划线、图片等
java
SpannableString spanString = new SpannableString("欢迎光临Harvic的博客");
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(spanString);