渣渣兔 发表于 2024-12-26 08:11:03

Android Studio 2024 小米便签项目摆设

目次
前言
一、软件安装
二、下载小米便签项目源码
三、新建项目工程
四、将下载的项目源码导入到Android项目的对应目次及文件下
五、解决错误
六、摆设假造机
七、项目展示


前言

经过一学期的学习,《软件工程》这门课程已靠近尾声。由此,老师给我们布置了一个实践使命——小米便签项目。具体是由小组合作,摆设项目和上传长途git仓库。因为在实践完成过程中发现会出现很多问题,故编写这这篇博客,用来记录问题。希望也能帮到大家,谢谢!
一、软件安装

这里先容下我用的Android Studio的版本是2024.2.1,SDK版本为API 24,Gradle版本为8.9。
Android Studio官网下载链接https://developer.android.google.cn/studio?hl=en,找到对应版本举行下载,具体的安装方式推荐大家看这篇https://blog.csdn.net/m0_73909612/article/details/137931888。
二、下载小米便签项目源码

首先我们从github上的开源代码仓库上下载小米便签的源码包。下载地点:https://codeload.github.com/MiCode/Notes/zip/master,然后将下载的zip包举行解压。
https://i-blog.csdnimg.cn/direct/5612df48ca6640f4b968ccf73850d407.png
三、新建项目工程

双击打开Android Studio软件,选择New Project,选择Empty Views Activity,新建一个空项目:https://i-blog.csdnimg.cn/direct/aa6934d437f54ba3bb22b0b38f1569f9.png
按照下面图示举行配置:https://i-blog.csdnimg.cn/direct/4aef5eb824104956b391a4d3805935ef.png
新创建好的项目目次如下:
https://i-blog.csdnimg.cn/direct/24ea0c6e89534b589d5ec849ddb50de1.png
四、将下载的项目源码导入到Android项目的对应目次及文件下

把原项目的代码内容搬到新建的项目工程中去:
1.首先把项目 Notes-master\src\net\micode\notes 下的包全部导入 Android Studio 的 net\micode\notes 下:
https://i-blog.csdnimg.cn/direct/fac1aafd672f4eb6be1a5e3fc36ceacb.png
2.把 Notes-master\res 目次下的包全部导入 Android Studio 的 res 中:
(重复的文件选择替换掉这些文件)
https://i-blog.csdnimg.cn/direct/b454235e55e449d6a6e2da4a25041353.png
3.将以下代码导入到AndroidManifest.xml文件中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
      android:allowBackup="true"
      android:dataExtractionRules="@xml/data_extraction_rules"
      android:fullBackupContent="@xml/backup_rules"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/Theme.Notesmaster"
      tools:targetApi="31">

      <activity
            android:name=".ui.NotesListActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:theme="@style/NoteTheme"
            android:uiOptions="splitActionBarWhenNarrow"
            android:windowSoftInputMode="adjustPan"
            android:exported="true">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
      </activity>

      <activity
            android:name=".ui.NoteEditActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:launchMode="singleTop"
            android:theme="@style/NoteTheme"
            android:exported="true">

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/text_note" />
                <data android:mimeType="vnd.android.cursor.item/call_note" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.INSERT_OR_EDIT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/text_note" />
                <data android:mimeType="vnd.android.cursor.item/call_note" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
      </activity>


      <provider
            android:name="net.micode.notes.data.NotesProvider"
            android:authorities="micode_notes"
            android:multiprocess="true" />

      <receiver
            android:name=".widget.NoteWidgetProvider_2x"
            android:label="@string/app_widget2x2"
            android:exported="true">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
                <action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_2x_info" />
      </receiver>
      <receiver
            android:name=".widget.NoteWidgetProvider_4x"
            android:label="@string/app_widget4x4"
            android:exported="true">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
                <action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_4x_info" />
      </receiver>

      <receiver android:name=".ui.AlarmInitReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
      </receiver>

      <receiver
            android:name="net.micode.notes.ui.AlarmReceiver"
            android:process=":remote" >
      </receiver>

      <activity
            android:name=".ui.AlarmAlertActivity"
            android:label="@string/app_name"
            android:launchMode="singleInstance"
            android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
      </activity>

      <activity
            android:name="net.micode.notes.ui.NotesPreferenceActivity"
            android:label="@string/preferences_title"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Holo.Light" >
      </activity>

      <service
            android:name="net.micode.notes.gtask.remote.GTaskSyncService"
            android:exported="false" >
      </service>

      <meta-data
            android:name="android.app.default_searchable"
            android:value=".ui.NoteEditActivity" />
      
<!--      <activity-->
<!--            android:name=".MainActivity"-->
<!--            android:exported="true">-->
<!--            <intent-filter>-->
<!--                <action android:name="android.intent.action.MAIN" />-->

<!--                <category android:name="android.intent.category.LAUNCHER" />-->
<!--            </intent-filter>-->
<!--      </activity>-->
      
    </application>

</manifest> 五、解决错误

导入完成之后,点击小锤子(Make Model '......')构建项目,然后本次实践使命的重头戏来了,你会发现有很多报错,解决一个来一个。不要慌,我们一个一个来解决:
1.依靠下载:
        源码依靠于一个httpcomponents-client组件,以执行网络服务,这里我们需要去下载依靠:
下载链接:https://dlcdn.apache.org//httpcomponents/httpclient/binary/httpcomponents-client-4.5.14-bin.zip
然后将下载好后的zip包解压放在下一目次:
https://i-blog.csdnimg.cn/direct/bc7cab68941d497ab76be4cb507f712a.png
在Android Studio中导入依靠:
选择选择File -> Project Structure ->Dependencies-> All Dependencies -> +->https://i-blog.csdnimg.cn/direct/b73d37941f2e43e7b4d731f82cd69942.png
填写绝对路径,这里根据自己下载的依靠库路径填写。
https://i-blog.csdnimg.cn/direct/8ce7effbc8e64a3784784dabf7caa90b.png
导入后,会发现build.gradle多了以下内容:
https://i-blog.csdnimg.cn/direct/e2273ca67f604e0b8790014b90cbfcf2.png
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
https://i-blog.csdnimg.cn/direct/8f6418695da34d90bf82316c0e11e066.png

解决方法==>解释以下代码:https://i-blog.csdnimg.cn/direct/0878ce85843f4173a4adade52a090f45.png
修改为:
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
D:\Code\AndroidCode\Notesmaster\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java:511: 错误: 需要常量表达式
            case R.id.menu_new_note: https://i-blog.csdnimg.cn/direct/1a8de30534524805ae3f6d1576d38efe.png

解决办法参考链接:https://blog.csdn.net/mjh1667002013/article/details/134763804
4.报错:jar包冲突
https://i-blog.csdnimg.cn/direct/610c8e3e7e7c4450916ba19466cd15f2.png
这里是因为我们刚才导入的依靠包有问题,所以在build.gradle里举行修改:
这部分代码有误
https://i-blog.csdnimg.cn/direct/e2273ca67f604e0b8790014b90cbfcf2.png
修改成:
dependencies {

    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.activity)
    implementation(libs.constraintlayout)
    implementation(files("E:\\\\mi\\\\Notesmaster\\\\httpcomponents-client-4.5.14-bin\\lib\\httpclient-osgi-4.5.14.jar"))
    implementation(files("E:\\\\mi\\\\Notesmaster\\\\httpcomponents-client-4.5.14-bin\\lib\\httpclient-win-4.5.14.jar"))
    implementation(files("E:\\\\mi\\\\Notesmaster\\\\httpcomponents-client-4.5.14-bin\\lib\\httpcore-4.4.16.jar"))
    testImplementation(libs.junit)
    androidTestImplementation(libs.ext.junit)
    androidTestImplementation(libs.espresso.core)
} 5.报错: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
https://i-blog.csdnimg.cn/direct/8fcfca6267f24d9099f79da7a69182cb.png

解决办法:在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");
    } 六、摆设假造机

到这里,项目摆设完成了,我们再次点击Make Module 这个小锤子,终于没有出现报错信息了。
https://i-blog.csdnimg.cn/direct/d383122d53554306a921d1f13fbfcdf3.png
接下来:我们开始摆设假造机,依次点击:1->2->3.https://i-blog.csdnimg.cn/direct/43e86ac84a7d4564a1beba1af92e6fd7.png
https://i-blog.csdnimg.cn/direct/08b80a8349684c17aad2c33125355ce0.png
在这个页面,任意选择一个机型:
https://i-blog.csdnimg.cn/direct/b37990324413482a972dfcb692f5d379.png
下一步,选择API,这里你们可以试一下 35/34,我的电脑不知道什么缘故原由选择这两个都会出现冷启动失败,而网上的解决办法我都举行了尝试,无疑都失败了,末了,我尝试使用了低API,如API 24,发现没有报错。
https://i-blog.csdnimg.cn/direct/c9f8a6dc5ab447a1a7177a4025ff243a.png
七、项目展示

末了,点击运行,运行成功!
https://i-blog.csdnimg.cn/direct/58fad306372e4c3ca78c11bc037b2a35.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android Studio 2024 小米便签项目摆设