在Win10以及SDK为33的环境下——小米便签项目的搭建

news/2024/5/20 4:03:26 标签: gradle, android studio, android

文章目录

  • 0. 我的操作系统和开发环境
  • 1. 相关文件下载:
  • 2. import project:
    • 2.1 用import project导入项目
  • 3. make project:
    • 3.1 AS中的命令行乱码问题:
    • 3.2 依赖库缺失问题:
    • 3.3 关于targetSdkVersion
    • 3.4 关于Missing URL
    • 3.5 关于Manifest merger failed
    • 3.6 关于Cannot resolve method 'setLatestEventInfo' in 'Notification'!
    • 3.7 关于Duplicate class found!类重复!
    • 3.8 关于3 files found with path 'META-INF/DEPENDENCIES'.
  • 参考资料

0. 我的操作系统和开发环境

  • Win10操作系统

  • Android Studio 2022版

  • Gradle插件和Gradle版本:
    在这里插入图片描述

  • SDK版本:
    在这里插入图片描述

  • 依赖添加情况:
    在这里插入图片描述

1. 相关文件下载:

  • 项目源代码的下载
  • 缺少的依赖库——httpcomponents-client-4.5.14-bin
    在这里插入图片描述

2. import project:

由于该项目原本是基于Eclipse来进行开发,所以我们需要使用AS的import project来使用gradle将该项目重新构建。

2.1 用import project导入项目

  • 用import project导入项目:
    在这里插入图片描述
  • 导入的过程中遇到了这个问题:
    在这里插入图片描述

主要问题为:这报错信息中的Add google Maven repository and sync project,看来可能Project的build.gradle少了google()* 然后这个问题就解决了~
在这里插入图片描述

3. make project:

点击AS中的绿色小锤子make project

3.1 AS中的命令行乱码问题:

在这里插入图片描述

  • 点击两下shift键引导出搜索框:
    在这里插入图片描述
  • vmoptions文件下去添加-Dfile.encoding=UTF-8语句:
    在这里插入图片描述
  • 重启项目后成功可见:
    在这里插入图片描述

3.2 依赖库缺失问题:

在这里插入图片描述

  • 首先要去httpcomponents-client-4.5.14-bin
    下载依赖文件:
    在这里插入图片描述
  • 将下载后的安装包放到项目的根目录下:
    在这里插入图片描述
  • 通过AS官方的依赖导入功能来导入依赖:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 载入后在build.gradle(app)文件中:会自动创建好这样的语句:
    在这里插入图片描述
  • 至此导入库失败的问题被解决!

3.3 关于targetSdkVersion

在这里插入图片描述

  • targetSdkVersion 14 根据AS的提示改成了targetSdkVersion 33.

3.4 关于Missing URL

在这里插入图片描述

  • 根据AS的提示 (红色小灯泡) 增加了下面的两个语句:
    在这里插入图片描述

3.5 关于Manifest merger failed

在这里插入图片描述

  • 这个问题是我找的所有的参考文中都没有遇到的情况,所以最后只能硬啃报错内容来改Bug
    最后是在这个博文中找到解决办法:
    解决安卓组件不允许进行跨进程调用的问题
    原理在这篇博客中有细说:
    android:exported=“true”
  • 简单来说就是Android12的新特性,当我的SDK大于31时,如果要使得我的安卓组件可以进行跨进程调用的话,我就必须加上这句:
    android:exported="true"

3.6 关于Cannot resolve method ‘setLatestEventInfo’ in ‘Notification’!

在这里插入图片描述

  • 这个问题的解决办法在参考文中有详细给出,只需要将大佬们重写的showNotification函数替换原本的函数就可以解决这个问题。
private void showNotification(int tickerId, String content) {
        PendingIntent pendingIntent;
        if (tickerId != R.string.ticker_success) {
            pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
                    NotesPreferenceActivity.class), 0);

        } else {
            pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
                    NotesListActivity.class), 0);
        }


        Notification.Builder builder = new Notification.Builder(mContext)
                .setAutoCancel(true)
                .setContentTitle(mContext.getString(R.string.app_name))
                .setContentText(content)
                .setContentIntent(pendingIntent)
                .setWhen(System.currentTimeMillis())
                .setOngoing(true);
        Notification notification=builder.getNotification();
        mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
    }

3.7 关于Duplicate class found!类重复!

在这里插入图片描述

  • 这个难题我找了很多资料也没有解决,最后是靠自己的顿悟,想到既然类重复的原因是各种jar之间的冲突,那我只需要保留我最需要的包,把其它有冲突的包都忽略不就行了吗?

  • 顺者网上相关问题的无效版,我了解到大概重要的jar包是哪些:
    在这里插入图片描述

  • 我把和这3个jar包有冲突的包都exclude了:
    在这里插入图片描述

3.8 关于3 files found with path ‘META-INF/DEPENDENCIES’.

在这里插入图片描述

  • 只需要结合日志的提示,添加了这一句配置:
    在这里插入图片描述
  • 至此在该环境下的小米便签的搭建完成~

参考资料

解决项目搭建的问题:

项目搭建参考博客1

项目搭建参考博客2

解决Could not find com.android.tools.build:gradle:(各种版本)
Could not find com.android.tools.build:gradle:(各种版本)

解决项目运行的问题:
解决命令行乱码问题
在这里插入图片描述
解决项目依赖包缺失的问题
解决安卓组件不允许进行跨进程调用的问题
在这里插入图片描述

android:exported=“true”

android:exported="true"是什么
android:exported 其实并不是Android12的新属性在前面的版本也可以看见它。它是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。
作用是什么
在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动。
如果它写在service中并且为false则表示则该服务不能够跨进程使用。
所以总体来说它的主要作用是:是否支持其它应用调用当前组件。
以前在我们需要的时候需要自己手动写,但是在Android12中他会默认添加并且默认为true。
把里面提到的所有的安卓的组件中都给加上了android:exported=“true”

解决Cannot resolve method ‘setLatestEventInfo’ in 'Notification’的问题
在这里插入图片描述
用重写的函数替代原本的函数。


http://www.niftyadmin.cn/n/163729.html

相关文章

Qt demo——修改用户资料窗口

一、效果展示 基本信息界面 联系方式界面 详细资料界面 二、实现 1.窗口布局 左边是一个 QListWidget,分别包含三个 item。(基本信息,联系方式,详细资料)右边整体是一个 QVBoxLayout,即垂直布局。 上面…

volatile、extern、static的区别

这三者都能对变量的访问和存储行为产生影响,但是区别很大 volatile 用于确保变量的实时性,可靠性 用于告诉编译器一个变量可能被意外修改的标记,即这个变量的值可能随时发生变化。它告诉编译器不要优化掉对这个变量的读取操作,…

LIN是什么

文章目录一、Local Interconnect Network二、LIN协议历史三、CAN-LIN网关四、Lin总线被广泛应用的原因一、Local Interconnect Network LIN 是 Local Interconnect Network(局部互联网) 的缩写,是基于 UART/SCI(Universal Asynchronous Rece…

【Mysbatis】超详细教程

🌈博客主页:屠一乐的博客 📅 发文时间:2023.3.19 🎈 一定存在只有你才能做成的事 🌹 博主水平有限,如有错误,欢迎指正 欢迎各位👍收藏💎评论✉ MyBatis1、MyB…

Python | 蓝桥杯进阶第三卷——动态规划

欢迎交流学习~~ 专栏: 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列: 🏆 Python | 蓝桥杯进阶第一卷——字符串 🔎 Python | 蓝桥杯进阶第二卷——贪心 💝 Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…

Windows权限提升—MySQL数据库提权

Windows权限提升—MySQL数据库提权1. 前言2. 数据库提权介绍2.1. 常见数据库端口2.2. MySQL数据库提权条件2.3. MySQL数据库提权类型3. MySQL中UDF提权3.1. UDF提权介绍3.2. UDF提权思路3.3. UDF提权步骤3.3.1. 获取外连数据库3.3.1.1. 外连数据库3.3.1.2. 连接数据库3.3.1.3. …

C/C++每日一练(20230319)

目录 1. 反转链表 II 🌟🌟 2. 解码方法 🌟🌟 3. 擅长编码的小k 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …

「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…