Android Studio 2023 小米便签项目部署

04-10 10308阅读 0评论

文章目录

  • 前言
  • 一、小米便签的部署
  • 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的功能,故这里我们尝试通过新建项目,然后搬运源码的方式来完成小米便签项目的部署。


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,10308人围观)

还没有评论,来说两句吧...

目录[+]