当前位置: 首页 > article >正文

【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
    • 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)‘ 已经过时了
    • 5. android:windowIsTranslucent=true导致页面转场动画穿透
    • 6. Android自定义打包名称
    • 7. 检查和更新Android gradle插件
    • 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.

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自定义打包名称


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 插件) 版本。

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.组合文字设置:字体、颜色、下划线、图片等

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


http://www.kler.cn/a/376114.html

相关文章:

  • 信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高
  • java.net.SocketException: Connection reset 异常原因分析和解决方法
  • Linux网络_套接字_UDP网络_TCP网络
  • MC1.12.2 macOS高清修复OptiFine运行崩溃
  • 软件测试 —— Selenium常用函数
  • C++:string
  • 112. gui辅助调节光源阴影
  • 浅谈鸿蒙生态崛起的机遇
  • LeetCode647:回文子串
  • 大规模语言模型:从理论到实践(1)
  • Python 工具库每日推荐 【Sphinx】
  • 李飞飞团队新突破:低成本高泛化机器人训练法,零样本迁移成功率90%!
  • 【AI开源项目】FastGPT- 深入解析 FastGPT 的知识库逻辑与检索机制:让 AI 更聪明的秘密
  • 20+款数据库DBA常用工具,助你高效管理
  • b站小土堆PyTorch视频学习笔记(二)
  • Spring Boot中发送邮件步骤
  • Web API简洁架构:3个热门开源项目汇总!
  • 如何设计一个支撑数亿用户的系统?
  • NLP segment-02-聊一聊关键词提取 keyword
  • 人工智能技术的应用前景:改变我们的生活和工作方式
  • Servlet 3.0 注解开发
  • Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
  • PyCharm秘籍
  • AI会替代程序员吗?
  • 重构之提取类
  • java项目中如何有效提高List集合的读写速度?