Android touchscreen control application for Snapmaker 3-in-1 3D printers (SM 2.0 series).
FabScreen provides a native Android interface to control 3D printing, laser engraving, and CNC machining workflows directly from the device touchscreen.
- Snapmaker 2.0 (A350, A250) — 3D printing, laser engraving, CNC machining
- 3D printing, laser engraving, and CNC machining control
- Wi-Fi and USB file transfer
- Real-time machine status monitoring
- Firmware over-the-air (OTA) updates
- Laser camera and auto-focus support (via Bluetooth)
- Modular tool head detection and management
- Multi-language UI support
- Orca Slicer remote connect (HTTP API)
fabscreen/ Main application module
fabscreen-updating/ OTA updater app
libraries/
fabscreen-legacy/ Core library (business logic, serial protocol, HTTP server, UI widgets)
features/
about/ About screen feature module
buildSrc/ Gradle dependency version catalog
Essential third-party libraries:
- ButterKnife — view binding
- RxJava — reactive state management
- RxAndroid — Android main thread scheduler
- Okio — byte array and I/O processing
- AndServer — embedded HTTP server
- Retrofit 2 — HTTP API client
- ARouter — in-app routing
- Firebase Crashlytics — crash reporting
- Glide — image loading
- Android Studio 3.5+
- JDK 1.8
- Android NDK 22.1.7171670
- Gradle 5.4.1+ (wrapper included)
git clone https://github.com/Snapmaker/Snapmaker-SM2-Screen-App.git
cd Snapmaker-SM2-Screen-AppFirebase Crashlytics and Analytics are used by default. If you want to use Firebase services, copy the example template and fill in your own Firebase project credentials:
cp fabscreen/google-services.json.example fabscreen/google-services.jsonIf you do not need Firebase, remove the com.google.gms.google-services and com.google.firebase.crashlytics plugins from fabscreen/build.gradle, and remove the Firebase dependency entries.
Debug builds do not require signing configuration. For release builds, create a keystore and configure signing credentials via environment variables or gradle.properties:
export KEYSTORE_PATH=/path/to/your.keystore
export KEYSTORE_PASSWORD=your_store_password
export KEY_ALIAS=your_key_alias
export KEY_PASSWORD=your_key_passwordAlternatively, add these to your ~/.gradle/gradle.properties or project-level local.properties:
KEYSTORE_PATH=/path/to/your.keystore
KEYSTORE_PASSWORD=your_store_password
KEY_ALIAS=your_key_alias
KEY_PASSWORD=your_key_password# Build debug APK
./gradlew assembleDebug
# Build release APK
./gradlew assembleReleaseclass FooFragment extends BaseFragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// initialize
}
@Override
protected int getLayoutResID() {
return R.layout.fragment_foo;
}
private void initView() {
}
private void initData() {
}
private void handleBar() {
}
@OnClick(R.id.btn_baz)
void onClickBaz() {
}
}Snapmaker Software Team
TBD