Android Studio 2023 小米便签项目部署

2024-06-04 9729阅读

文章目录

  • 前言
  • 一、小米便签的部署
  • 1.下载小米便签项目源码zip包以及解压
  • 2 空项目建立及其注意事项
  • 3 将源码对应的文件复制到 Android 项目的对应目录及文件下
  • 4.错误1:错误提示乱码
  • 5.依赖下载
  • 6.错误2:找不到符号 notification.setLatestEventInfo...
  • 7.错误3:switch语句报错Constant expression required
  • 8.错误4:jar包冲突
  • 9.错误5:3 files found with path ‘META-INF/DEPENDENCIES’ ...
  • 10.成功部署及运行展示
  • 二、遇到的问题汇总
  • 1.错误提示乱码
  • 1.1 错误显示
  • 1.2 报错原因
  • 1.3 解决办法
  • 2.找不到符号 notification.setLatestEventInfo(......)
  • 2.1 错误示例
  • 2.2 报错原因
  • 2.3 解决办法
  • 3.switch语句报错Constant expression required
  • 3.1 错误示例
  • 3.2 报错原因
  • 3.3 解决办法
  • 4.jar包冲突
  • 4.1 错误示例
  • 4.2 错误原因
  • 4.3 解决办法
  • 5.three files found with path ‘META-INF/DEPENDENCIES’ ...
  • 5.1 错误示例
  • 5.2 错误原因
  • 5.3 解决办法
  • 补充
  • 1.新版的Android Studio的eclipse项目导入问题
  • 问题描述
  • ​编辑
  • 原因
  • 2.关于小米便签功能不完全的问题
  • 问题描述
  • 原因
  • 解决办法
  • 致谢
  • 总结

    前言

    最近在完成软件工程的结对作业,具体任务是与同学合作,然后部署项目和泛读代码。因为网上小米便签部署的博客大多是 Android Studio 2022以及之前的版本,而我的Android Studio 是 2023.2.1 的版本,在部署项目的过程中肯定会出现一些问题,故编写这篇博客,用来记录问题和复习。


    一、小米便签的部署

    这里我的Android Studio的版本是 2023.2.1 版本,SDK版本为 API 34,Gradle版本为 8.4。

    1.下载小米便签项目源码zip包以及解压

    首先我们从github上的开源代码仓库上下载小米便签的源码包。其不带git信息的zip包的下载地址:

    https://codeload.github.com/MiCode/Notes/zip/master

     然后我们把下载的zip包进行解压,把Notes-master项目包提取出来。

    Android Studio 2023 小米便签项目部署 第1张

    Android Studio 2023 小米便签项目部署 第2张

    2 空项目建立及其注意事项

    选择New Project,选择Empty Views Activity,新建一个空项目:

    Android Studio 2023 小米便签项目部署 第3张

    如下配置,注意包名为net.micode.notes,因为原项目的开发语言是用Java的,故我们Language也选择Java:

    Android Studio 2023 小米便签项目部署 第4张

    新创建好的项目目录如下:

    Android Studio 2023 小米便签项目部署 第5张

    3 将源码对应的文件复制到 Android 项目的对应目录及文件下

    接下来我们开始把原项目的代码搬运过来:

    1、首先把项目 Notes-master\src\net\micode\notes 下的包全部导入 Android Studio 的 net\micode\notes 下:

    Android Studio 2023 小米便签项目部署 第6张

    Android Studio 2023 小米便签项目部署 第7张

    Android Studio 2023 小米便签项目部署 第8张

    2、把 Notes-master\res 目录下的包全部导入 Android Studio 的 res 中:

    Android Studio 2023 小米便签项目部署 第9张

    Android Studio 2023 小米便签项目部署 第10张

    重复的文件全选 Overwrite:

    Android Studio 2023 小米便签项目部署 第11张

    3、开始把清单文件的内容导入:

    (把各个Activity标签包裹的内容套入即可)

    最好导入完的清单 manifest 内容如下:

    
        
        
        
        
        
        
        
        
        
        
            
                
                    
                    
                
            
            
                
                    
                    
                    
                    
                
                
                    
                    
                    
                    
                
                
                    
                    
                
                
            
            
            
                
                    
                    
                    
                
                
            
            
                
                    
                    
                    
                
                
            
            
                
                    
                
            
            
            
            
            
            
            
            
            
            
            
    
    
    
    
    
    
    
            
        
    

    4.错误1:错误提示乱码

    点击小锤子(Make Model '......')构建项目,然后会出现如下问题,但是错误提示乱码:

    Android Studio 2023 小米便签项目部署 第12张

    Android Studio 2023 小米便签项目部署 第13张

    双击shift,然后搜索vmoption,然后点击Edit Custom VM Options...

    Android Studio 2023 小米便签项目部署 第14张

    然后最末尾补充如下代码:-Dfile.encoding=UTF-8:

    Android Studio 2023 小米便签项目部署 第15张

    重启项目后再点击绿色的小锤子构建项目,然后这时的报错信息就很清晰了:

    Android Studio 2023 小米便签项目部署 第16张

    5.依赖下载

    源码依赖于一个httpcomponents-client组件,以执行网络服务,这里我们需要去下载依赖:

    下载链接:

    https://dlcdn.apache.org//httpcomponents/httpclient/binary/httpcomponents-client-4.5.14-bin.zip

    Android Studio 2023 小米便签项目部署 第17张

    然后我们把下载好后的zip包解压并放在如下目录:

    Android Studio 2023 小米便签项目部署 第18张

    在 Android Studio 中导入依赖:

    选择File -> Project Structure -> All Dependencies -> +

    Android Studio 2023 小米便签项目部署 第19张

    填写绝对路径,这里我下载的依赖库路径是:

    D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib

    Android Studio 2023 小米便签项目部署 第20张

    导入后,我们会发现app目录下的build.gradle多了如下内容:

    Android Studio 2023 小米便签项目部署 第21张

    6.错误2:找不到符号 notification.setLatestEventInfo...

    这时,又会报如下错误:

    错误: 找不到符号 notification.setLatestEventInfo(......)

    D:\Code\AndroidCode\Notesmaster\app\src\main\java\net\micode\notes\gtask\remote\GTaskASyncTask.java:80: 错误: 找不到符号

            notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,

                        ^

      符号:   方法 setLatestEventInfo(Context,String,String,PendingIntent)

      位置: 类型为Notification的变量 notification

    Android Studio 2023 小米便签项目部署 第22张

    这是因为该函数在Android 6.0及以上版本被去除,可以先注释掉这段函数,后续再想办法解决(使用Android 5.0以下版本的SDK可能不会出现这个问题,不过推荐使用android 5.0或者以上版本的SDK)

    故注释如下代码:

    Android Studio 2023 小米便签项目部署 第23张

    修改为:

    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), PendingIntent.FLAG_IMMUTABLE);
        } else {
            pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
                    NotesListActivity.class), PendingIntent.FLAG_IMMUTABLE);
        }
        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);
    }

    7.错误3:switch语句报错Constant expression required

    再次构建项目,然后又遇到错误:switch语句报错Constant expression required

    D:\Code\AndroidCode\Notesmaster\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java:511: 错误: 需要常量表达式

                case R.id.menu_new_note:

    Android Studio 2023 小米便签项目部署 第24张

    解决办法:

    参考链接:【已解决】switch语句报错Constant expression required-CSDN博客

    8.错误4:jar包冲突

    改好了之后,又又又出现问题了!!!

    问题:jar包冲突:

    Android Studio 2023 小米便签项目部署 第25张

    这里是因为我们刚刚导入的依赖有问题,不能全部导入,不然会出现jar包之间的冲突,故把刚刚导入的包部分进行修改,即修改app目录下的 build.gradle:

    这部分代码我们刚刚导入的有误:

    Android Studio 2023 小米便签项目部署 第21张

    要把刚刚导入包时自动生成的代码进行修改:

    //    部分需要重新修改
    //    implementation(fileTree(mapOf(
    //        "dir" to "D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib",
    //        "include" to listOf("*.aar", "*.jar"),
    //        "exclude" to listOf("")
    //    )))
        //修改为如下代码:
        implementation(files("D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar"))
        implementation(files("D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar"))
        implementation(files("D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar"))

    9.错误5:3 files found with path ‘META-INF/DEPENDENCIES’ ...

    然后你懂的,又出错了:

    3 files found with path ‘META-INF/DEPENDENCIES’

    3 files found with path 'META-INF/DEPENDENCIES'.

    Adding a packaging block may help, please refer to

    https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/dsl/Packaging

    for more information

    Android Studio 2023 小米便签项目部署 第27张

    这里我们需要解决重复包含文件的问题:

    参考链接:知士荟

    但他的解决办法不适用于新版本的Android Studio,故这里我们尝试其他写法,

    在build.gradle(Module:app)的android字段里面,加上这段代码,排除掉冲突的系统依赖包即可

    packaging {
            resources.excludes.add("META-INF/DEPENDENCIES");
            resources.excludes.add("META-INF/NOTICE");
            resources.excludes.add("META-INF/LICENSE");
            resources.excludes.add("META-INF/LICENSE.txt");
            resources.excludes.add("META-INF/NOTICE.txt");
        }

    10.成功部署及运行展示

    至此,项目部署完成,我们点击 Make Module 这个小锤子 ,以及 Sync Project with Gradle Files 按钮,就可以准备运行 小米便签 APP 了。

    Android Studio 2023 小米便签项目部署 第28张Android Studio 2023 小米便签项目部署 第29张

    点击运行,运行成功!!

    Android Studio 2023 小米便签项目部署 第30张

    二、遇到的问题汇总

    如果您看完了小米便签的部署的话,这部分的内容应该对您意义不大,这是笔者对遇到的错误的汇总,以便复习,方便以后遇到类似错误之后及时反应过来。

    1.错误提示乱码

    1.1 错误显示

    错误如下,提示信息都为乱码:

    Android Studio 2023 小米便签项目部署 第13张

    1.2 报错原因

    字符格式的设置问题。

    1.3 解决办法

    双击shift,然后搜索vmoption,然后点击Edit Custom VM Options...

    Android Studio 2023 小米便签项目部署 第14张

    然后最末尾补充如下代码:-Dfile.encoding=UTF-8:

    Android Studio 2023 小米便签项目部署 第15张

    重启项目后再点击绿色的小锤子构建项目,然后这时的报错信息就很清晰了:

    Android Studio 2023 小米便签项目部署 第16张

    这里还有其他解决办法,具体参考博客:知士荟

    原文:

    Android Studio 2023 小米便签项目部署 第35张

    (可能下面build框中会出现不可打印的字符,这是因为没配置好解码方式,配置方法如下,在build.gralde(Module:Notes-master)(或类似的不是app的build.gradle)末尾添加如下字段)

    2.找不到符号 notification.setLatestEventInfo(......)

    2.1 错误示例

    具体报错:

    D:\Code\AndroidCode\Notesmaster\app\src\main\java\net\micode\notes\gtask\remote\GTaskASyncTask.java:80: 错误: 找不到符号

            notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,

                        ^

      符号:   方法 setLatestEventInfo(Context,String,String,PendingIntent)

      位置: 类型为Notification的变量 notification

    Android Studio 2023 小米便签项目部署 第22张

    2.2 报错原因

    这是因为该函数在Android 6.0及以上版本被去除,可以先注释掉这段函数,后续再想办法解决(使用Android 5.0以下版本的SDK可能不会出现这个问题,不过推荐使用android 5.0或者以上版本的SDK)

    2.3 解决办法

    故注释如下代码:

    Android Studio 2023 小米便签项目部署 第23张

    修改为:

    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), PendingIntent.FLAG_IMMUTABLE);
        } else {
            pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
                    NotesListActivity.class), PendingIntent.FLAG_IMMUTABLE);
        }
        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.switch语句报错Constant expression required

    3.1 错误示例

    具体报错:

     D:\Code\AndroidCode\Notesmaster\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java:511: 错误: 需要常量表达式

                case R.id.menu_new_note:

    Android Studio 2023 小米便签项目部署 第24张

    3.2 报错原因

    在JDK17中switch语句的条件表达式支持使用枚举类型,而这个特性还没被Android Studio支持。

    3.3 解决办法

    参考链接:【已解决】switch语句报错Constant expression required-CSDN博客

    在gradle.properties配置文件下添加如下代码

    android.nonFinalResIds=false

    修改后,编译器便不会报错:

    Android Studio 2023 小米便签项目部署 第39张

    4.jar包冲突

    4.1 错误示例

    Android Studio 2023 小米便签项目部署 第25张

    4.2 错误原因

    因为我们导入的依赖有问题,不能全部导入,不然会出现jar包之间的冲突。

    4.3 解决办法

    故把刚刚导入的包部分进行修改,即修改app目录下的 build.gradle:

    这部分代码我们刚刚导入的有误:

    Android Studio 2023 小米便签项目部署 第21张

    修改方法1:把刚刚导入依赖包时自动生成的代码进行修改:

    //    部分需要重新修改
    //    implementation(fileTree(mapOf(
    //        "dir" to "D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib",
    //        "include" to listOf("*.aar", "*.jar"),
    //        "exclude" to listOf("")
    //    )))
        //修改为如下代码:
        implementation(files("D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar"))
        implementation(files("D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar"))
        implementation(files("D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar"))

    修改方法2:或者修改成这样也可以:

        implementation(fileTree(mapOf(
            "dir" to "D:\Code\AndroidCode\Notesmaster\httpcomponents-client-4.5.14-bin\lib",
            "include" to listOf("*.aar", "*.jar"),
            "exclude" to listOf("commons-codec-1.11.jar","httpclient-4.5.14.jar","httpclient-cache-4.5.14.jar",
                "fluent-hc-4.5.14.jar","httpmime-4.5.14.jar")
        )))

    选择其中一个方法修改完后便不会再报同样的错。

    5.three files found with path ‘META-INF/DEPENDENCIES’ ...

    5.1 错误示例

    具体报错:

    3 files found with path 'META-INF/DEPENDENCIES'.

    Adding a packaging block may help, please refer to

    https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/dsl/Packaging

    for more information

    Android Studio 2023 小米便签项目部署 第27张

    5.2 错误原因

    这里是因为我们包含的文件重复了。

    5.3 解决办法

     这里我们需要解决重复包含文件的问题:

    参考链接:知士荟

    但他的解决办法似乎不适用于新版本的Android Studio,因为写法变了,故这里我们尝试其他写法。在build.gradle(Module:app)的android字段里面,加上这段代码,排除掉冲突的系统依赖包即可

    packaging {
            resources.excludes.add("META-INF/DEPENDENCIES");
            resources.excludes.add("META-INF/NOTICE");
            resources.excludes.add("META-INF/LICENSE");
            resources.excludes.add("META-INF/LICENSE.txt");
            resources.excludes.add("META-INF/NOTICE.txt");
        }

    补充

    这里虽然我们没用到Android Studio的Import的功能,但我一开始有尝试使用以往Android Studio导入eclipse项目的方法,并在Import项目时出了问题,所以最后这里我也记录一下。

    1.新版的Android Studio的eclipse项目导入问题

    问题描述

    Android Studio最新版本没有Import Project from ADT (Eclipse Android),只有Import Project from external model或者Create project from existing sources.生成出来的项目都没有gradle文件,所以一运行就会Directory 'D:\Code\AndroidCode\Notes-master' does not contain a Gradle build.报错

    Android Studio 2023 小米便签项目部署 第43张

    原因

    在官方文档中有说明:如果我们要导入没有用gradle构建的项目,只能通过自己复制源代码到新项目或者为原项目编写一个gradle.build文件,以下是官方文档中的原文:

    如果您的 IntelliJ 项目尚未使用 Gradle 构建系统,您可从两种方式中选择其一,以将项目导入到 Android Studio 中,后续部分将进行详述:

    • 新建一个空的 Android Studio 项目,然后将现有源代码复制到与新项目关联的目录中。如需了解详情,请参阅有关通过新建空项目进行迁移的部分。
    • 为项目新建一个 Gradle build 文件,然后将项目和上述新 build 文件导入到 Android Studio 中。如需了解详情,请参阅通过创建自定义 Gradle build 文件进行迁移部分。

      这个是官方文档的链接:https://developer.android.com/studio/intro/migrate?hl=zh-cn#kts

      2.关于小米便签功能不完全的问题

      问题描述

      在小米便签部署完后,我们运行了一下小米便签,尝试其功能,发现只有书写标签的功能。

      Android Studio 2023 小米便签项目部署 第44张

      原因

      这是因为源码中在res.values包下的 styles.xml 设置有问题。

      Android Studio 2023 小米便签项目部署 第45张

      Android Studio 2023 小米便签项目部署 第46张

      解决办法

      把上图截取的代码修改为如下代码,便可看到其他功能:

          
              visible
          

      Android Studio 2023 小米便签项目部署 第47张

      致谢

      感谢如下博客提供的解决办法的思路:

      参考博客1

      参考博客2

      参考博客3

       switch语句报错解决办法

      总结

      Android Studio的2023版本似乎没了之前一键导入eclipse项目并自动构建gradle的功能,故这里我们尝试通过新建项目,然后搬运源码的方式来完成小米便签项目的部署。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]