Melon is a work-in-progress social media app, which is inspired by Twitter app.
The posts displayed in sample app are collected from weibo.com with weiboSpider. All rights belong to their respective authors. Please contact me is there is any wrong usage of them and I would delete them as soon as possible.
Feed | User | Content Posting |
---|---|---|
- Mostly written in Kotlin
- Modularization
- Kotlin Coroutines
- Android architecture components and Jetpack
- Dependency Injection
- Retrofit + OkHttp - RESTful API and networking client.
- Gson - Serialization/Deserialzation handling.
- Dagger - Dependency injection.
- Android Architecture Components - a collection of libraries that helps build robust, testable and maintainable apps.
- View Binding - a feature that provides a safer way to interact with views.
- Lifecycle - provides classes and interfaces that let you build lifecycle-aware components.
- LiveData - an lifecycle-aware and observable data holder class.
- ViewModel - store and manage UI-related data in a lifecycle conscious way.
- Paging3 - helps load the display pages of data from a larger dataset from local storage or over network.
- Android Jetpack Components - a suite of libraries to write high-quality code.
- Navigation - build and structure in-app UI, and navigate between screens.
- Preference - build interactive settings screens without needing to interact with device storage or manage the UI.
- Room - manage persistent data storage.
- Material Design Components - a suite of widgets in Material Design style.
- Coil - Image loading library backed by Kotlin Coroutines.
- Epoxy - Simplified way to build complex layout in RecyclerView.
- AMap - A Library for locating and map displaying.
- Lottie - Render After Effects animations natively.
- JMessage - Instant messaging.
- PhotoView - Implementation of ImageView for Android that supports zooming, by various touch gestures.
- uCrop - Image Cropping Library.
- ByteX - A bytecode plugin platform based on Android Gradle Transform API and ASM.
- AndResGuard - A tool to obfuscate resource files.
The app uses signing config from local.properties
as it is displayed in ~/app/build.gradle.kts
, you may need to fill keystore paths and related informations for normal building.
signingConfigs {
getByName("debug") {
storeFile = file(gradleLocalProperties(rootDir).getProperty("keystore.debug.filename"))
storePassword = gradleLocalProperties(rootDir).getProperty("keystore.debug.storePassword")
keyAlias = gradleLocalProperties(rootDir).getProperty("keystore.debug.keyAlias")
keyPassword = gradleLocalProperties(rootDir).getProperty("keystore.debug.keyPassword")
}
create("release") {
storeFile = file(gradleLocalProperties(rootDir).getProperty("keystore.release.filename"))
storePassword = gradleLocalProperties(rootDir).getProperty("keystore.release.storePassword")
keyAlias = gradleLocalProperties(rootDir).getProperty("keystore.release.keyAlias")
keyPassword = gradleLocalProperties(rootDir).getProperty("keystore.release.keyPassword")
}
}
You need to supply API / client keys for various services the app uses:
You can find information about how to gain access via the relevant links.
Once you obtain the keys, you need to set them in your local.properties
# Get this from amap
amap_api_key=*****
# Get this from JMessage
jpush_api_key=*****
Copyright 2021 Raymond Wong
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.