【Android】常见问题集锦

填坑,填不完,根本填不完

文章目录

    • [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.项目包名重命名

  1. 修改包名设置,清单文件,gradle
  2. 修改包名目录,直接修改无效
    新建目录,在整体迁移
  3. 修改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); 

Android中的SpannableString与SpannableStringBuilder详解

相关推荐
zhimingwen14 分钟前
通过ADB获取Android应用的SHA1签名
android·adb
2501_9160074717 分钟前
深入理解 iOS 文件管理体系,从沙盒结构到多工具协同的工程化文件管理实践
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张17 分钟前
iOS 性能检测工具深度解析 多工具协同下的全维度性能检测体系建设
android·ios·小程序·https·uni-app·iphone·webview
Kapaseker34 分钟前
不卖课,纯干货!Android分层你知多少?
android·kotlin
前端小王呀40 分钟前
自定义图表相关配置
android·前端·javascript
zh_xuan41 分钟前
本人遇过的常见安卓面试题(持续更新)
android·面试题
2501_9159184143 分钟前
uniapp iOS 打包和上架流程,一次跨端项目的工程化交付记录
android·ios·小程序·https·uni-app·iphone·webview
2501_916008891 小时前
HTTPS 双向认证抓包指南,TLS 握手分析、mTLS 排查方法与多工具协同方案
android·网络协议·http·小程序·https·uni-app·iphone
天庭鸡腿哥1 小时前
输入鸡和马,解suo至尊版!
android·windows·visual studio·everything
豆豆豆大王1 小时前
Android 初学者入门:Fragment 与 ListView 基础概念与使用方法
android