【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详解

相关推荐
Dnelic-2 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记
Eastsea.Chen4 小时前
MTK Android12 user版本MtkLogger
android·framework
长亭外的少年12 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
建群新人小猿14 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神15 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
兰琛15 小时前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Y多了个想法16 小时前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
NotesChapter17 小时前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快18 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl19 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5