From 0030c29b627ac0caabc6846c7bc1a259b2cc8380 Mon Sep 17 00:00:00 2001 From: Mygod Date: Thu, 12 Jan 2017 23:31:52 +0800 Subject: [PATCH] Move app to mobile subproject --- .gitignore | 2 - .gitmodules | 38 ++++----- .travis.yml | 2 +- README.md | 3 +- build.sbt | 74 ++++-------------- build.sh | 16 ---- kcptun/go | 1 - kcptun/kcptun | 1 - kcptun/make.bash | 69 ---------------- mobile/build.sbt | 44 +++++++++++ {gfwlist => mobile/gfwlist}/gen.pl | 0 {gfwlist => mobile/gfwlist}/gen.py | 0 lint.xml => mobile/lint.xml | 0 {src => mobile/src}/main/AndroidManifest.xml | 0 .../shadowsocks/aidl/IShadowsocksService.aidl | 0 .../aidl/IShadowsocksServiceCallback.aidl | 0 .../src}/main/assets/acl/bypass-china.acl | 0 .../src}/main/assets/acl/bypass-lan-china.acl | 0 .../src}/main/assets/acl/bypass-lan.acl | 0 .../src}/main/assets/acl/china-list.acl | 0 .../src}/main/assets/acl/gfwlist.acl | 0 .../src}/main/assets/fonts/Iceland.ttf | Bin .../src}/main/assets/pages/about.html | 0 {src => mobile/src}/main/ic_launcher-web.png | Bin .../github/shadowsocks/DialogFragment.java | 0 .../java/com/github/shadowsocks/System.java | 0 {src => mobile/src}/main/jni/Android.mk | 0 {src => mobile/src}/main/jni/Application.mk | 0 {src => mobile/src}/main/jni/badvpn | 0 .../src}/main/jni/build-shared-executable.mk | 0 .../src}/main/jni/include/libev/config.h | 0 .../src}/main/jni/include/pdnsd/config.h | 0 .../jni/include/shadowsocks-libev/config.h | 0 .../src}/main/jni/include/sodium/version.h | 0 {src => mobile/src}/main/jni/libancillary | 0 {src => mobile/src}/main/jni/libevent | 0 {src => mobile/src}/main/jni/mbedtls | 0 {src => mobile/src}/main/jni/pcre | 0 {src => mobile/src}/main/jni/pdnsd | 0 {src => mobile/src}/main/jni/redsocks | 0 .../src}/main/jni/shadowsocks-libev | 0 {src => mobile/src}/main/jni/system.cpp | 0 .../ic_navigation_close.xml | 0 .../res/drawable-hdpi/ic_navigation_close.png | Bin .../res/drawable-hdpi/ic_stat_shadowsocks.png | Bin .../res/drawable-mdpi/ic_navigation_close.png | Bin .../res/drawable-mdpi/ic_stat_shadowsocks.png | Bin .../drawable-v21/background_selectable.xml | 0 .../main/res/drawable-v21/background_stat.xml | 0 .../drawable-xhdpi/ic_navigation_close.png | Bin .../drawable-xhdpi/ic_stat_shadowsocks.png | Bin .../drawable-xxhdpi/ic_navigation_close.png | Bin .../drawable-xxhdpi/ic_stat_shadowsocks.png | Bin .../drawable-xxxhdpi/ic_navigation_close.png | Bin .../main/res/drawable/background_header.png | Bin .../main/res/drawable/background_profile.xml | 0 .../res/drawable/background_selectable.xml | 0 .../main/res/drawable/background_stat.xml | 0 .../res/drawable/ic_action_assignment.xml | 0 .../main/res/drawable/ic_action_copyright.xml | 0 .../main/res/drawable/ic_action_delete.xml | 0 .../res/drawable/ic_action_description.xml | 0 .../src}/main/res/drawable/ic_action_done.xml | 0 .../res/drawable/ic_action_help_outline.xml | 0 .../main/res/drawable/ic_action_note_add.xml | 0 .../main/res/drawable/ic_action_settings.xml | 0 .../main/res/drawable/ic_av_playlist_add.xml | 0 .../main/res/drawable/ic_content_copy.xml | 0 .../main/res/drawable/ic_content_paste.xml | 0 .../src}/main/res/drawable/ic_image_edit.xml | 0 .../res/drawable/ic_navigation_refresh.xml | 0 .../drawable/ic_qu_shadowsocks_launcher.xml | 0 .../main/res/drawable/ic_social_share.xml | 0 .../src}/main/res/drawable/ic_start_busy.xml | 0 .../main/res/drawable/ic_start_connected.xml | 0 .../src}/main/res/drawable/ic_start_idle.xml | 0 .../src}/main/res/layout/dialog_acl_rule.xml | 0 .../src}/main/res/layout/layout_about.xml | 0 .../src}/main/res/layout/layout_apps.xml | 0 .../src}/main/res/layout/layout_apps_item.xml | 0 .../main/res/layout/layout_custom_rules.xml | 0 .../res/layout/layout_global_settings.xml | 0 .../src}/main/res/layout/layout_header.xml | 0 .../src}/main/res/layout/layout_list.xml | 0 .../src}/main/res/layout/layout_main.xml | 0 .../src}/main/res/layout/layout_profile.xml | 0 .../main/res/layout/layout_profile_config.xml | 0 .../src}/main/res/layout/layout_tasker.xml | 0 .../main/res/layout/toolbar_light_dark.xml | 0 .../src}/main/res/menu/app_manager_menu.xml | 0 .../src}/main/res/menu/custom_rules_menu.xml | 0 .../main/res/menu/profile_config_menu.xml | 0 .../main/res/menu/profile_manager_menu.xml | 0 .../main/res/menu/profile_share_popup.xml | 0 .../src}/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src}/main/res/mipmap-mdpi/ic_launcher.png | Bin .../main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../src}/main/res/raw/gtm_default_container | Bin .../src}/main/res/values-ja/strings.xml | 0 .../src}/main/res/values-ru/strings.xml | 0 .../src}/main/res/values-v21/dimen.xml | 0 .../src}/main/res/values-v21/strings.xml | 0 .../src}/main/res/values-v21/styles.xml | 0 .../src}/main/res/values-zh-rCN/strings.xml | 0 .../src}/main/res/values-zh-rTW/strings.xml | 0 .../src}/main/res/values/arrays.xml | 0 {src => mobile/src}/main/res/values/attrs.xml | 0 .../src}/main/res/values/colors.xml | 0 .../src}/main/res/values/configs.xml | 0 {src => mobile/src}/main/res/values/dimen.xml | 0 .../src}/main/res/values/strings.xml | 0 .../src}/main/res/values/styles.xml | 0 .../src}/main/res/xml/pref_global.xml | 0 .../src}/main/res/xml/pref_profile.xml | 0 .../src}/main/res/xml/shortcuts.xml | 0 {src => mobile/src}/main/res/xml/tracker.xml | 0 .../preference/DialogPreferencePlus.scala | 0 .../mygod/preference/EditTextPreference.scala | 0 .../EditTextPreferenceDialogFragment.scala | 0 .../preference/NumberPickerPreference.scala | 0 ...NumberPickerPreferenceDialogFragment.scala | 0 .../mygod/preference/PreferenceCategory.scala | 0 .../mygod/preference/PreferenceFragment.scala | 0 .../preference/PreferenceGroupAdapter.scala | 0 .../mygod/preference/SummaryPreference.scala | 0 .../github/shadowsocks/AboutFragment.scala | 0 .../com/github/shadowsocks/AppManager.scala | 0 .../com/github/shadowsocks/BaseService.scala | 0 .../com/github/shadowsocks/BootReceiver.scala | 0 .../shadowsocks/GlobalConfigFragment.scala | 0 .../shadowsocks/GlobalSettingsFragment.scala | 0 .../github/shadowsocks/GuardedProcess.scala | 0 .../com/github/shadowsocks/MainActivity.scala | 0 .../shadowsocks/ProfileConfigActivity.scala | 0 .../shadowsocks/ProfileConfigFragment.scala | 0 .../github/shadowsocks/ProfilesFragment.scala | 0 .../com/github/shadowsocks/QRCodeDialog.scala | 0 .../shadowsocks/QuickToggleShortcut.scala | 0 .../shadowsocks/ServiceBoundContext.scala | 0 .../shadowsocks/ShadowsocksApplication.scala | 0 .../shadowsocks/ShadowsocksBackupAgent.scala | 0 .../shadowsocks/ShadowsocksNatService.scala | 0 .../shadowsocks/ShadowsocksNotification.scala | 0 .../ShadowsocksRunnerActivity.scala | 0 .../ShadowsocksRunnerService.scala | 0 .../shadowsocks/ShadowsocksTileService.scala | 0 .../shadowsocks/ShadowsocksVpnService.scala | 0 .../shadowsocks/ShadowsocksVpnThread.scala | 0 .../github/shadowsocks/TaskerActivity.scala | 0 .../github/shadowsocks/TaskerReceiver.scala | 0 .../github/shadowsocks/ToolbarFragment.scala | 0 .../com/github/shadowsocks/acl/Acl.scala | 0 .../github/shadowsocks/acl/AclSyncJob.scala | 0 .../shadowsocks/acl/CustomRulesFragment.scala | 0 .../github/shadowsocks/acl/DonaldTrump.scala | 0 .../com/github/shadowsocks/acl/Subnet.scala | 0 .../shadowsocks/database/DBHelper.scala | 0 .../github/shadowsocks/database/Profile.scala | 0 .../shadowsocks/database/ProfileManager.scala | 0 .../KcpCliPreferenceDialogFragment.scala | 0 .../github/shadowsocks/utils/CloseUtils.scala | 0 .../github/shadowsocks/utils/Constants.scala | 0 .../github/shadowsocks/utils/IOUtils.scala | 0 .../com/github/shadowsocks/utils/Parser.scala | 0 .../shadowsocks/utils/TaskerSettings.scala | 0 .../shadowsocks/utils/TcpFastOpen.scala | 0 .../shadowsocks/utils/TrafficMonitor.scala | 0 .../utils/TrafficMonitorThread.scala | 0 .../github/shadowsocks/utils/Typefaces.scala | 0 .../com/github/shadowsocks/utils/Utils.scala | 0 .../shadowsocks/widget/BoundedCardView.scala | 0 .../widget/BoundedGridLayout.scala | 0 .../shadowsocks/widget/BoundedView.scala | 0 .../widget/UndoSnackbarManager.scala | 0 .../scala/collection/mutable/SortedList.scala | 0 177 files changed, 77 insertions(+), 173 deletions(-) delete mode 100755 build.sh delete mode 160000 kcptun/go delete mode 160000 kcptun/kcptun delete mode 100755 kcptun/make.bash create mode 100644 mobile/build.sbt rename {gfwlist => mobile/gfwlist}/gen.pl (100%) rename {gfwlist => mobile/gfwlist}/gen.py (100%) rename lint.xml => mobile/lint.xml (100%) rename {src => mobile/src}/main/AndroidManifest.xml (100%) rename {src => mobile/src}/main/aidl/com/github/shadowsocks/aidl/IShadowsocksService.aidl (100%) rename {src => mobile/src}/main/aidl/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl (100%) rename {src => mobile/src}/main/assets/acl/bypass-china.acl (100%) rename {src => mobile/src}/main/assets/acl/bypass-lan-china.acl (100%) rename {src => mobile/src}/main/assets/acl/bypass-lan.acl (100%) rename {src => mobile/src}/main/assets/acl/china-list.acl (100%) rename {src => mobile/src}/main/assets/acl/gfwlist.acl (100%) rename {src => mobile/src}/main/assets/fonts/Iceland.ttf (100%) rename {src => mobile/src}/main/assets/pages/about.html (100%) rename {src => mobile/src}/main/ic_launcher-web.png (100%) rename {src => mobile/src}/main/java/com/github/shadowsocks/DialogFragment.java (100%) rename {src => mobile/src}/main/java/com/github/shadowsocks/System.java (100%) rename {src => mobile/src}/main/jni/Android.mk (100%) rename {src => mobile/src}/main/jni/Application.mk (100%) rename {src => mobile/src}/main/jni/badvpn (100%) rename {src => mobile/src}/main/jni/build-shared-executable.mk (100%) rename {src => mobile/src}/main/jni/include/libev/config.h (100%) rename {src => mobile/src}/main/jni/include/pdnsd/config.h (100%) rename {src => mobile/src}/main/jni/include/shadowsocks-libev/config.h (100%) rename {src => mobile/src}/main/jni/include/sodium/version.h (100%) rename {src => mobile/src}/main/jni/libancillary (100%) rename {src => mobile/src}/main/jni/libevent (100%) rename {src => mobile/src}/main/jni/mbedtls (100%) rename {src => mobile/src}/main/jni/pcre (100%) rename {src => mobile/src}/main/jni/pdnsd (100%) rename {src => mobile/src}/main/jni/redsocks (100%) rename {src => mobile/src}/main/jni/shadowsocks-libev (100%) rename {src => mobile/src}/main/jni/system.cpp (100%) rename {src => mobile/src}/main/res/drawable-anydpi-v21/ic_navigation_close.xml (100%) rename {src => mobile/src}/main/res/drawable-hdpi/ic_navigation_close.png (100%) rename {src => mobile/src}/main/res/drawable-hdpi/ic_stat_shadowsocks.png (100%) rename {src => mobile/src}/main/res/drawable-mdpi/ic_navigation_close.png (100%) rename {src => mobile/src}/main/res/drawable-mdpi/ic_stat_shadowsocks.png (100%) rename {src => mobile/src}/main/res/drawable-v21/background_selectable.xml (100%) rename {src => mobile/src}/main/res/drawable-v21/background_stat.xml (100%) rename {src => mobile/src}/main/res/drawable-xhdpi/ic_navigation_close.png (100%) rename {src => mobile/src}/main/res/drawable-xhdpi/ic_stat_shadowsocks.png (100%) rename {src => mobile/src}/main/res/drawable-xxhdpi/ic_navigation_close.png (100%) rename {src => mobile/src}/main/res/drawable-xxhdpi/ic_stat_shadowsocks.png (100%) rename {src => mobile/src}/main/res/drawable-xxxhdpi/ic_navigation_close.png (100%) rename {src => mobile/src}/main/res/drawable/background_header.png (100%) rename {src => mobile/src}/main/res/drawable/background_profile.xml (100%) rename {src => mobile/src}/main/res/drawable/background_selectable.xml (100%) rename {src => mobile/src}/main/res/drawable/background_stat.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_assignment.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_copyright.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_delete.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_description.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_done.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_help_outline.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_note_add.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_action_settings.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_av_playlist_add.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_content_copy.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_content_paste.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_image_edit.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_navigation_refresh.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_qu_shadowsocks_launcher.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_social_share.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_start_busy.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_start_connected.xml (100%) rename {src => mobile/src}/main/res/drawable/ic_start_idle.xml (100%) rename {src => mobile/src}/main/res/layout/dialog_acl_rule.xml (100%) rename {src => mobile/src}/main/res/layout/layout_about.xml (100%) rename {src => mobile/src}/main/res/layout/layout_apps.xml (100%) rename {src => mobile/src}/main/res/layout/layout_apps_item.xml (100%) rename {src => mobile/src}/main/res/layout/layout_custom_rules.xml (100%) rename {src => mobile/src}/main/res/layout/layout_global_settings.xml (100%) rename {src => mobile/src}/main/res/layout/layout_header.xml (100%) rename {src => mobile/src}/main/res/layout/layout_list.xml (100%) rename {src => mobile/src}/main/res/layout/layout_main.xml (100%) rename {src => mobile/src}/main/res/layout/layout_profile.xml (100%) rename {src => mobile/src}/main/res/layout/layout_profile_config.xml (100%) rename {src => mobile/src}/main/res/layout/layout_tasker.xml (100%) rename {src => mobile/src}/main/res/layout/toolbar_light_dark.xml (100%) rename {src => mobile/src}/main/res/menu/app_manager_menu.xml (100%) rename {src => mobile/src}/main/res/menu/custom_rules_menu.xml (100%) rename {src => mobile/src}/main/res/menu/profile_config_menu.xml (100%) rename {src => mobile/src}/main/res/menu/profile_manager_menu.xml (100%) rename {src => mobile/src}/main/res/menu/profile_share_popup.xml (100%) rename {src => mobile/src}/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {src => mobile/src}/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {src => mobile/src}/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {src => mobile/src}/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {src => mobile/src}/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {src => mobile/src}/main/res/raw/gtm_default_container (100%) rename {src => mobile/src}/main/res/values-ja/strings.xml (100%) rename {src => mobile/src}/main/res/values-ru/strings.xml (100%) rename {src => mobile/src}/main/res/values-v21/dimen.xml (100%) rename {src => mobile/src}/main/res/values-v21/strings.xml (100%) rename {src => mobile/src}/main/res/values-v21/styles.xml (100%) rename {src => mobile/src}/main/res/values-zh-rCN/strings.xml (100%) rename {src => mobile/src}/main/res/values-zh-rTW/strings.xml (100%) rename {src => mobile/src}/main/res/values/arrays.xml (100%) rename {src => mobile/src}/main/res/values/attrs.xml (100%) rename {src => mobile/src}/main/res/values/colors.xml (100%) rename {src => mobile/src}/main/res/values/configs.xml (100%) rename {src => mobile/src}/main/res/values/dimen.xml (100%) rename {src => mobile/src}/main/res/values/strings.xml (100%) rename {src => mobile/src}/main/res/values/styles.xml (100%) rename {src => mobile/src}/main/res/xml/pref_global.xml (100%) rename {src => mobile/src}/main/res/xml/pref_profile.xml (100%) rename {src => mobile/src}/main/res/xml/shortcuts.xml (100%) rename {src => mobile/src}/main/res/xml/tracker.xml (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/DialogPreferencePlus.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/EditTextPreference.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/NumberPickerPreference.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/NumberPickerPreferenceDialogFragment.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/PreferenceCategory.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/PreferenceFragment.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/PreferenceGroupAdapter.scala (100%) rename {src => mobile/src}/main/scala/be/mygod/preference/SummaryPreference.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/AboutFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/AppManager.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/BaseService.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/BootReceiver.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/GlobalSettingsFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/GuardedProcess.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/MainActivity.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ProfileConfigActivity.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ProfilesFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/QRCodeDialog.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ServiceBoundContext.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksBackupAgent.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksNotification.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksRunnerActivity.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksTileService.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/TaskerActivity.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/TaskerReceiver.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/ToolbarFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/acl/Acl.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/acl/AclSyncJob.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/acl/CustomRulesFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/acl/DonaldTrump.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/acl/Subnet.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/database/DBHelper.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/database/Profile.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/database/ProfileManager.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/preferences/KcpCliPreferenceDialogFragment.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/CloseUtils.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/Constants.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/IOUtils.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/Parser.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/TaskerSettings.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/TrafficMonitor.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/Typefaces.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/utils/Utils.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/widget/BoundedCardView.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/widget/BoundedGridLayout.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/widget/BoundedView.scala (100%) rename {src => mobile/src}/main/scala/com/github/shadowsocks/widget/UndoSnackbarManager.scala (100%) rename {src => mobile/src}/main/scala/scala/collection/mutable/SortedList.scala (100%) diff --git a/.gitignore b/.gitignore index 5cdc29d1..2cd26960 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,4 @@ out/ #NDK src/main/obj src/main/libs -src/main/assets/armeabi-v7a/* -src/main/assets/x86/* jni/Application.mk diff --git a/.gitmodules b/.gitmodules index 713a88a5..f0e422f9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,35 +1,29 @@ -[submodule "src/main/jni/shadowsocks-libev"] - path = src/main/jni/shadowsocks-libev +[submodule "mobile/src/main/jni/shadowsocks-libev"] + path = mobile/src/main/jni/shadowsocks-libev url = https://github.com/shadowsocks/shadowsocks-libev -[submodule "src/main/jni/badvpn"] - path = src/main/jni/badvpn +[submodule "mobile/src/main/jni/badvpn"] + path = mobile/src/main/jni/badvpn url = https://github.com/shadowsocks/badvpn.git branch = shadowsocks-android -[submodule "src/main/jni/libancillary"] - path = src/main/jni/libancillary +[submodule "mobile/src/main/jni/libancillary"] + path = mobile/src/main/jni/libancillary url = https://github.com/shadowsocks/libancillary.git branch = shadowsocks-android -[submodule "src/main/jni/libevent"] - path = src/main/jni/libevent +[submodule "mobile/src/main/jni/libevent"] + path = mobile/src/main/jni/libevent url = https://github.com/shadowsocks/libevent.git branch = shadowsocks-android -[submodule "src/main/jni/redsocks"] - path = src/main/jni/redsocks +[submodule "mobile/src/main/jni/redsocks"] + path = mobile/src/main/jni/redsocks url = https://github.com/shadowsocks/redsocks.git branch = shadowsocks-android -[submodule "src/main/jni/pdnsd"] - path = src/main/jni/pdnsd +[submodule "mobile/src/main/jni/pdnsd"] + path = mobile/src/main/jni/pdnsd url = https://github.com/shadowsocks/pdnsd.git branch = shadowsocks-android -[submodule "kcptun/kcptun"] - path = kcptun/kcptun - url = https://github.com/shadowsocks/kcptun -[submodule "kcptun/go"] - path = kcptun/go - url = https://github.com/shadowsocks/go -[submodule "src/main/jni/mbedtls"] - path = src/main/jni/mbedtls +[submodule "mobile/src/main/jni/mbedtls"] + path = mobile/src/main/jni/mbedtls url = https://github.com/ARMmbed/mbedtls -[submodule "src/main/jni/pcre"] - path = src/main/jni/pcre +[submodule "mobile/src/main/jni/pcre"] + path = mobile/src/main/jni/pcre url = https://android.googlesource.com/platform/external/pcre diff --git a/.travis.yml b/.travis.yml index 22364c17..f217887e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,4 +50,4 @@ install: fi script: - - $SBTPATH/sbt native-build android:package-debug + - $SBTPATH/sbt android:package diff --git a/README.md b/README.md index 04564ceb..14688f34 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,6 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala. * Set environment variable `ANDROID_HOME` to `/path/to/android-sdk` * Set environment variable `ANDROID_NDK_HOME` to `/path/to/android-ndk` -* Set environment variable `GOROOT_BOOTSTRAP` to `/path/to/go` * Create your key following the instructions at https://developer.android.com/studio/publish/app-signing.html * Create `local.properties` from `local.properties.example` with your own key information * Invoke the building like this @@ -31,7 +30,7 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala. git submodule update --init # Build the App - sbt native-build clean android:package-release + sbt clean android:package-release ``` ### TRANSLATE diff --git a/build.sbt b/build.sbt index bf214363..87f0605b 100644 --- a/build.sbt +++ b/build.sbt @@ -1,66 +1,22 @@ -scalaVersion := "2.11.8" -dexMaxHeap := "4g" +import android.Keys.proguardCache -enablePlugins(AndroidApp) -android.useSupportVectors +lazy val commonSettings = Seq( + scalaVersion := "2.11.8", + dexMaxHeap := "4g", -name := "shadowsocks" -version := "3.4.2" -versionCode := Some(174) + organization := "com.github.shadowsocks", -platformTarget := "android-25" + platformTarget := "android-25", -compileOrder := CompileOrder.JavaThenScala -javacOptions ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil -scalacOptions ++= "-target:jvm-1.7" :: "-Xexperimental" :: Nil + compileOrder := CompileOrder.JavaThenScala, + javacOptions ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil, + scalacOptions ++= "-target:jvm-1.7" :: "-Xexperimental" :: Nil, -proguardVersion := "5.3.2" -proguardCache := Seq() -proguardOptions ++= - "-keep class com.github.shadowsocks.System { *; }" :: - "-dontwarn com.google.android.gms.internal.**" :: - "-dontwarn com.j256.ormlite.**" :: - "-dontwarn okio.**" :: - "-dontwarn org.xbill.**" :: - Nil + proguardVersion := "5.3.2", + proguardCache := Seq(), -shrinkResources := true -typedResources := false -resConfigs := Seq("ja", "ru", "zh-rCN", "zh-rTW") + shrinkResources := true, + typedResources := false +) -val supportLibsVersion = "25.1.0" -val playServicesVersion = "10.0.1" -resolvers += Resolver.jcenterRepo -libraryDependencies ++= - "com.android.support" % "cardview-v7" % supportLibsVersion :: - "com.android.support" % "customtabs" % supportLibsVersion :: - "com.android.support" % "design" % supportLibsVersion :: - "com.android.support" % "gridlayout-v7" % supportLibsVersion :: - "com.android.support" % "preference-v14" % supportLibsVersion :: - "com.futuremind.recyclerfastscroll" % "fastscroll" % "0.2.5" :: - "com.evernote" % "android-job" % "1.1.4" :: - "com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01" :: - "com.google.android.gms" % "play-services-ads" % playServicesVersion :: - "com.google.android.gms" % "play-services-analytics" % playServicesVersion :: - "com.google.android.gms" % "play-services-gcm" % playServicesVersion :: - "com.j256.ormlite" % "ormlite-android" % "5.0" :: - "com.mikepenz" % "crossfader" % "1.5.0" :: - "com.mikepenz" % "fastadapter" % "2.1.5" :: - "com.mikepenz" % "iconics-core" % "2.8.2" :: - "com.mikepenz" % "materialdrawer" % "5.8.1" :: - "com.mikepenz" % "materialize" % "1.0.0" :: - "com.squareup.okhttp3" % "okhttp" % "3.5.0" :: - "com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2" :: - "dnsjava" % "dnsjava" % "2.1.7" :: - "eu.chainfire" % "libsuperuser" % "1.0.0.201608240809" :: - "net.glxn.qrgen" % "android" % "2.0" :: - Nil - -lazy val nativeBuild = TaskKey[Unit]("native-build", "Build native executables") -nativeBuild := { - val logger = streams.value.log - Process("./build.sh") ! logger match { - case 0 => // Success! - case n => sys.error(s"Native build script exit code: $n") - } -} +lazy val mobile = project.settings(commonSettings) diff --git a/build.sh b/build.sh deleted file mode 100755 index 5a646eab..00000000 --- a/build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -function try () { -"$@" || exit -1 -} - -pushd src/main -# Clean up old binaries (no longer used) -rm -rf assets/armeabi-v7a assets/x86 libs/armeabi-v7a libs/x86 -mkdir -p libs/armeabi-v7a libs/x86 -popd - -# Build kcptun -pushd kcptun -try ./make.bash -popd diff --git a/kcptun/go b/kcptun/go deleted file mode 160000 index c3f75e65..00000000 --- a/kcptun/go +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c3f75e654ddb95bd53351294337649c08e9f9409 diff --git a/kcptun/kcptun b/kcptun/kcptun deleted file mode 160000 index c532a50e..00000000 --- a/kcptun/kcptun +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c532a50e1aeeaa9dee2428b374c3651a5c95258a diff --git a/kcptun/make.bash b/kcptun/make.bash deleted file mode 100755 index 2eb1454d..00000000 --- a/kcptun/make.bash +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -function try () { -"$@" || exit -1 -} - -[ -z "$ANDROID_NDK_HOME" ] && ANDROID_NDK_HOME=~/android-ndk-r12b - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -DEPS=$DIR/.deps -ANDROID_ARM_TOOLCHAIN=$DEPS/android-toolchain-16-arm -ANDROID_X86_TOOLCHAIN=$DEPS/android-toolchain-16-x86 - -ANDROID_ARM_CC=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-gcc -ANDROID_ARM_STRIP=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-strip - -ANDROID_X86_CC=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-gcc -ANDROID_X86_STRIP=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-strip - - -if [ ! -d "$DEPS" ]; then - mkdir -p $DEPS -fi - -if [ ! -d "$ANDROID_ARM_TOOLCHAIN" ]; then - echo "Make standalone toolchain for ARM arch" - $ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py --arch arm \ - --api 16 --install-dir $ANDROID_ARM_TOOLCHAIN -fi - -if [ ! -d "$ANDROID_X86_TOOLCHAIN" ]; then - echo "Make standalone toolchain for X86 arch" - $ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py --arch x86 \ - --api 16 --install-dir $ANDROID_X86_TOOLCHAIN -fi - -if [ ! -d "$DIR/go/bin" ]; then - echo "Build the custom go" - - pushd $DIR/go/src - try ./make.bash - popd -fi - -export GOROOT=$DIR/go -export GOPATH=$DEPS/gopath -export GOBIN=$GOPATH/bin -mkdir -p $GOBIN -export PATH=$GOROOT/bin:$PATH - -pushd kcptun/client - -echo "Get dependences for kcptun" -go get -u github.com/xtaci/kcp-go -go get -u github.com/xtaci/smux -go get - -echo "Cross compile kcptun for arm" -try env CGO_ENABLED=1 CC=$ANDROID_ARM_CC GOOS=android GOARCH=arm GOARM=7 go build -ldflags="-s -w" -try $ANDROID_ARM_STRIP client -try mv client $DIR/../src/main/libs/armeabi-v7a/libkcptun.so - -echo "Cross compile kcptun for x86" -try env CGO_ENABLED=1 CC=$ANDROID_X86_CC GOOS=android GOARCH=386 go build -ldflags="-s -w" -try $ANDROID_X86_STRIP client -try mv client $DIR/../src/main/libs/x86/libkcptun.so -popd - -echo "Successfully build kcptun" diff --git a/mobile/build.sbt b/mobile/build.sbt new file mode 100644 index 00000000..bebd4e1e --- /dev/null +++ b/mobile/build.sbt @@ -0,0 +1,44 @@ +enablePlugins(AndroidApp) +android.useSupportVectors + +name := "shadowsocks" +version := "4.0.0" +versionCode := Some(174) + +proguardOptions ++= + "-keep class com.github.shadowsocks.System { *; }" :: + "-dontwarn com.google.android.gms.internal.**" :: + "-dontwarn com.j256.ormlite.**" :: + "-dontwarn okio.**" :: + "-dontwarn org.xbill.**" :: + Nil + +resConfigs := Seq("ja", "ru", "zh-rCN", "zh-rTW") + +val supportLibsVersion = "25.1.0" +val playServicesVersion = "10.0.1" +resolvers += Resolver.jcenterRepo +libraryDependencies ++= + "com.android.support" % "cardview-v7" % supportLibsVersion :: + "com.android.support" % "customtabs" % supportLibsVersion :: + "com.android.support" % "design" % supportLibsVersion :: + "com.android.support" % "gridlayout-v7" % supportLibsVersion :: + "com.android.support" % "preference-v14" % supportLibsVersion :: + "com.futuremind.recyclerfastscroll" % "fastscroll" % "0.2.5" :: + "com.evernote" % "android-job" % "1.1.4" :: + "com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01" :: + "com.google.android.gms" % "play-services-ads" % playServicesVersion :: + "com.google.android.gms" % "play-services-analytics" % playServicesVersion :: + "com.google.android.gms" % "play-services-gcm" % playServicesVersion :: + "com.j256.ormlite" % "ormlite-android" % "5.0" :: + "com.mikepenz" % "crossfader" % "1.5.0" :: + "com.mikepenz" % "fastadapter" % "2.1.5" :: + "com.mikepenz" % "iconics-core" % "2.8.2" :: + "com.mikepenz" % "materialdrawer" % "5.8.1" :: + "com.mikepenz" % "materialize" % "1.0.0" :: + "com.squareup.okhttp3" % "okhttp" % "3.5.0" :: + "com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2" :: + "dnsjava" % "dnsjava" % "2.1.7" :: + "eu.chainfire" % "libsuperuser" % "1.0.0.201608240809" :: + "net.glxn.qrgen" % "android" % "2.0" :: + Nil diff --git a/gfwlist/gen.pl b/mobile/gfwlist/gen.pl similarity index 100% rename from gfwlist/gen.pl rename to mobile/gfwlist/gen.pl diff --git a/gfwlist/gen.py b/mobile/gfwlist/gen.py similarity index 100% rename from gfwlist/gen.py rename to mobile/gfwlist/gen.py diff --git a/lint.xml b/mobile/lint.xml similarity index 100% rename from lint.xml rename to mobile/lint.xml diff --git a/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml similarity index 100% rename from src/main/AndroidManifest.xml rename to mobile/src/main/AndroidManifest.xml diff --git a/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksService.aidl b/mobile/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksService.aidl similarity index 100% rename from src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksService.aidl rename to mobile/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksService.aidl diff --git a/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl b/mobile/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl similarity index 100% rename from src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl rename to mobile/src/main/aidl/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl diff --git a/src/main/assets/acl/bypass-china.acl b/mobile/src/main/assets/acl/bypass-china.acl similarity index 100% rename from src/main/assets/acl/bypass-china.acl rename to mobile/src/main/assets/acl/bypass-china.acl diff --git a/src/main/assets/acl/bypass-lan-china.acl b/mobile/src/main/assets/acl/bypass-lan-china.acl similarity index 100% rename from src/main/assets/acl/bypass-lan-china.acl rename to mobile/src/main/assets/acl/bypass-lan-china.acl diff --git a/src/main/assets/acl/bypass-lan.acl b/mobile/src/main/assets/acl/bypass-lan.acl similarity index 100% rename from src/main/assets/acl/bypass-lan.acl rename to mobile/src/main/assets/acl/bypass-lan.acl diff --git a/src/main/assets/acl/china-list.acl b/mobile/src/main/assets/acl/china-list.acl similarity index 100% rename from src/main/assets/acl/china-list.acl rename to mobile/src/main/assets/acl/china-list.acl diff --git a/src/main/assets/acl/gfwlist.acl b/mobile/src/main/assets/acl/gfwlist.acl similarity index 100% rename from src/main/assets/acl/gfwlist.acl rename to mobile/src/main/assets/acl/gfwlist.acl diff --git a/src/main/assets/fonts/Iceland.ttf b/mobile/src/main/assets/fonts/Iceland.ttf similarity index 100% rename from src/main/assets/fonts/Iceland.ttf rename to mobile/src/main/assets/fonts/Iceland.ttf diff --git a/src/main/assets/pages/about.html b/mobile/src/main/assets/pages/about.html similarity index 100% rename from src/main/assets/pages/about.html rename to mobile/src/main/assets/pages/about.html diff --git a/src/main/ic_launcher-web.png b/mobile/src/main/ic_launcher-web.png similarity index 100% rename from src/main/ic_launcher-web.png rename to mobile/src/main/ic_launcher-web.png diff --git a/src/main/java/com/github/shadowsocks/DialogFragment.java b/mobile/src/main/java/com/github/shadowsocks/DialogFragment.java similarity index 100% rename from src/main/java/com/github/shadowsocks/DialogFragment.java rename to mobile/src/main/java/com/github/shadowsocks/DialogFragment.java diff --git a/src/main/java/com/github/shadowsocks/System.java b/mobile/src/main/java/com/github/shadowsocks/System.java similarity index 100% rename from src/main/java/com/github/shadowsocks/System.java rename to mobile/src/main/java/com/github/shadowsocks/System.java diff --git a/src/main/jni/Android.mk b/mobile/src/main/jni/Android.mk similarity index 100% rename from src/main/jni/Android.mk rename to mobile/src/main/jni/Android.mk diff --git a/src/main/jni/Application.mk b/mobile/src/main/jni/Application.mk similarity index 100% rename from src/main/jni/Application.mk rename to mobile/src/main/jni/Application.mk diff --git a/src/main/jni/badvpn b/mobile/src/main/jni/badvpn similarity index 100% rename from src/main/jni/badvpn rename to mobile/src/main/jni/badvpn diff --git a/src/main/jni/build-shared-executable.mk b/mobile/src/main/jni/build-shared-executable.mk similarity index 100% rename from src/main/jni/build-shared-executable.mk rename to mobile/src/main/jni/build-shared-executable.mk diff --git a/src/main/jni/include/libev/config.h b/mobile/src/main/jni/include/libev/config.h similarity index 100% rename from src/main/jni/include/libev/config.h rename to mobile/src/main/jni/include/libev/config.h diff --git a/src/main/jni/include/pdnsd/config.h b/mobile/src/main/jni/include/pdnsd/config.h similarity index 100% rename from src/main/jni/include/pdnsd/config.h rename to mobile/src/main/jni/include/pdnsd/config.h diff --git a/src/main/jni/include/shadowsocks-libev/config.h b/mobile/src/main/jni/include/shadowsocks-libev/config.h similarity index 100% rename from src/main/jni/include/shadowsocks-libev/config.h rename to mobile/src/main/jni/include/shadowsocks-libev/config.h diff --git a/src/main/jni/include/sodium/version.h b/mobile/src/main/jni/include/sodium/version.h similarity index 100% rename from src/main/jni/include/sodium/version.h rename to mobile/src/main/jni/include/sodium/version.h diff --git a/src/main/jni/libancillary b/mobile/src/main/jni/libancillary similarity index 100% rename from src/main/jni/libancillary rename to mobile/src/main/jni/libancillary diff --git a/src/main/jni/libevent b/mobile/src/main/jni/libevent similarity index 100% rename from src/main/jni/libevent rename to mobile/src/main/jni/libevent diff --git a/src/main/jni/mbedtls b/mobile/src/main/jni/mbedtls similarity index 100% rename from src/main/jni/mbedtls rename to mobile/src/main/jni/mbedtls diff --git a/src/main/jni/pcre b/mobile/src/main/jni/pcre similarity index 100% rename from src/main/jni/pcre rename to mobile/src/main/jni/pcre diff --git a/src/main/jni/pdnsd b/mobile/src/main/jni/pdnsd similarity index 100% rename from src/main/jni/pdnsd rename to mobile/src/main/jni/pdnsd diff --git a/src/main/jni/redsocks b/mobile/src/main/jni/redsocks similarity index 100% rename from src/main/jni/redsocks rename to mobile/src/main/jni/redsocks diff --git a/src/main/jni/shadowsocks-libev b/mobile/src/main/jni/shadowsocks-libev similarity index 100% rename from src/main/jni/shadowsocks-libev rename to mobile/src/main/jni/shadowsocks-libev diff --git a/src/main/jni/system.cpp b/mobile/src/main/jni/system.cpp similarity index 100% rename from src/main/jni/system.cpp rename to mobile/src/main/jni/system.cpp diff --git a/src/main/res/drawable-anydpi-v21/ic_navigation_close.xml b/mobile/src/main/res/drawable-anydpi-v21/ic_navigation_close.xml similarity index 100% rename from src/main/res/drawable-anydpi-v21/ic_navigation_close.xml rename to mobile/src/main/res/drawable-anydpi-v21/ic_navigation_close.xml diff --git a/src/main/res/drawable-hdpi/ic_navigation_close.png b/mobile/src/main/res/drawable-hdpi/ic_navigation_close.png similarity index 100% rename from src/main/res/drawable-hdpi/ic_navigation_close.png rename to mobile/src/main/res/drawable-hdpi/ic_navigation_close.png diff --git a/src/main/res/drawable-hdpi/ic_stat_shadowsocks.png b/mobile/src/main/res/drawable-hdpi/ic_stat_shadowsocks.png similarity index 100% rename from src/main/res/drawable-hdpi/ic_stat_shadowsocks.png rename to mobile/src/main/res/drawable-hdpi/ic_stat_shadowsocks.png diff --git a/src/main/res/drawable-mdpi/ic_navigation_close.png b/mobile/src/main/res/drawable-mdpi/ic_navigation_close.png similarity index 100% rename from src/main/res/drawable-mdpi/ic_navigation_close.png rename to mobile/src/main/res/drawable-mdpi/ic_navigation_close.png diff --git a/src/main/res/drawable-mdpi/ic_stat_shadowsocks.png b/mobile/src/main/res/drawable-mdpi/ic_stat_shadowsocks.png similarity index 100% rename from src/main/res/drawable-mdpi/ic_stat_shadowsocks.png rename to mobile/src/main/res/drawable-mdpi/ic_stat_shadowsocks.png diff --git a/src/main/res/drawable-v21/background_selectable.xml b/mobile/src/main/res/drawable-v21/background_selectable.xml similarity index 100% rename from src/main/res/drawable-v21/background_selectable.xml rename to mobile/src/main/res/drawable-v21/background_selectable.xml diff --git a/src/main/res/drawable-v21/background_stat.xml b/mobile/src/main/res/drawable-v21/background_stat.xml similarity index 100% rename from src/main/res/drawable-v21/background_stat.xml rename to mobile/src/main/res/drawable-v21/background_stat.xml diff --git a/src/main/res/drawable-xhdpi/ic_navigation_close.png b/mobile/src/main/res/drawable-xhdpi/ic_navigation_close.png similarity index 100% rename from src/main/res/drawable-xhdpi/ic_navigation_close.png rename to mobile/src/main/res/drawable-xhdpi/ic_navigation_close.png diff --git a/src/main/res/drawable-xhdpi/ic_stat_shadowsocks.png b/mobile/src/main/res/drawable-xhdpi/ic_stat_shadowsocks.png similarity index 100% rename from src/main/res/drawable-xhdpi/ic_stat_shadowsocks.png rename to mobile/src/main/res/drawable-xhdpi/ic_stat_shadowsocks.png diff --git a/src/main/res/drawable-xxhdpi/ic_navigation_close.png b/mobile/src/main/res/drawable-xxhdpi/ic_navigation_close.png similarity index 100% rename from src/main/res/drawable-xxhdpi/ic_navigation_close.png rename to mobile/src/main/res/drawable-xxhdpi/ic_navigation_close.png diff --git a/src/main/res/drawable-xxhdpi/ic_stat_shadowsocks.png b/mobile/src/main/res/drawable-xxhdpi/ic_stat_shadowsocks.png similarity index 100% rename from src/main/res/drawable-xxhdpi/ic_stat_shadowsocks.png rename to mobile/src/main/res/drawable-xxhdpi/ic_stat_shadowsocks.png diff --git a/src/main/res/drawable-xxxhdpi/ic_navigation_close.png b/mobile/src/main/res/drawable-xxxhdpi/ic_navigation_close.png similarity index 100% rename from src/main/res/drawable-xxxhdpi/ic_navigation_close.png rename to mobile/src/main/res/drawable-xxxhdpi/ic_navigation_close.png diff --git a/src/main/res/drawable/background_header.png b/mobile/src/main/res/drawable/background_header.png similarity index 100% rename from src/main/res/drawable/background_header.png rename to mobile/src/main/res/drawable/background_header.png diff --git a/src/main/res/drawable/background_profile.xml b/mobile/src/main/res/drawable/background_profile.xml similarity index 100% rename from src/main/res/drawable/background_profile.xml rename to mobile/src/main/res/drawable/background_profile.xml diff --git a/src/main/res/drawable/background_selectable.xml b/mobile/src/main/res/drawable/background_selectable.xml similarity index 100% rename from src/main/res/drawable/background_selectable.xml rename to mobile/src/main/res/drawable/background_selectable.xml diff --git a/src/main/res/drawable/background_stat.xml b/mobile/src/main/res/drawable/background_stat.xml similarity index 100% rename from src/main/res/drawable/background_stat.xml rename to mobile/src/main/res/drawable/background_stat.xml diff --git a/src/main/res/drawable/ic_action_assignment.xml b/mobile/src/main/res/drawable/ic_action_assignment.xml similarity index 100% rename from src/main/res/drawable/ic_action_assignment.xml rename to mobile/src/main/res/drawable/ic_action_assignment.xml diff --git a/src/main/res/drawable/ic_action_copyright.xml b/mobile/src/main/res/drawable/ic_action_copyright.xml similarity index 100% rename from src/main/res/drawable/ic_action_copyright.xml rename to mobile/src/main/res/drawable/ic_action_copyright.xml diff --git a/src/main/res/drawable/ic_action_delete.xml b/mobile/src/main/res/drawable/ic_action_delete.xml similarity index 100% rename from src/main/res/drawable/ic_action_delete.xml rename to mobile/src/main/res/drawable/ic_action_delete.xml diff --git a/src/main/res/drawable/ic_action_description.xml b/mobile/src/main/res/drawable/ic_action_description.xml similarity index 100% rename from src/main/res/drawable/ic_action_description.xml rename to mobile/src/main/res/drawable/ic_action_description.xml diff --git a/src/main/res/drawable/ic_action_done.xml b/mobile/src/main/res/drawable/ic_action_done.xml similarity index 100% rename from src/main/res/drawable/ic_action_done.xml rename to mobile/src/main/res/drawable/ic_action_done.xml diff --git a/src/main/res/drawable/ic_action_help_outline.xml b/mobile/src/main/res/drawable/ic_action_help_outline.xml similarity index 100% rename from src/main/res/drawable/ic_action_help_outline.xml rename to mobile/src/main/res/drawable/ic_action_help_outline.xml diff --git a/src/main/res/drawable/ic_action_note_add.xml b/mobile/src/main/res/drawable/ic_action_note_add.xml similarity index 100% rename from src/main/res/drawable/ic_action_note_add.xml rename to mobile/src/main/res/drawable/ic_action_note_add.xml diff --git a/src/main/res/drawable/ic_action_settings.xml b/mobile/src/main/res/drawable/ic_action_settings.xml similarity index 100% rename from src/main/res/drawable/ic_action_settings.xml rename to mobile/src/main/res/drawable/ic_action_settings.xml diff --git a/src/main/res/drawable/ic_av_playlist_add.xml b/mobile/src/main/res/drawable/ic_av_playlist_add.xml similarity index 100% rename from src/main/res/drawable/ic_av_playlist_add.xml rename to mobile/src/main/res/drawable/ic_av_playlist_add.xml diff --git a/src/main/res/drawable/ic_content_copy.xml b/mobile/src/main/res/drawable/ic_content_copy.xml similarity index 100% rename from src/main/res/drawable/ic_content_copy.xml rename to mobile/src/main/res/drawable/ic_content_copy.xml diff --git a/src/main/res/drawable/ic_content_paste.xml b/mobile/src/main/res/drawable/ic_content_paste.xml similarity index 100% rename from src/main/res/drawable/ic_content_paste.xml rename to mobile/src/main/res/drawable/ic_content_paste.xml diff --git a/src/main/res/drawable/ic_image_edit.xml b/mobile/src/main/res/drawable/ic_image_edit.xml similarity index 100% rename from src/main/res/drawable/ic_image_edit.xml rename to mobile/src/main/res/drawable/ic_image_edit.xml diff --git a/src/main/res/drawable/ic_navigation_refresh.xml b/mobile/src/main/res/drawable/ic_navigation_refresh.xml similarity index 100% rename from src/main/res/drawable/ic_navigation_refresh.xml rename to mobile/src/main/res/drawable/ic_navigation_refresh.xml diff --git a/src/main/res/drawable/ic_qu_shadowsocks_launcher.xml b/mobile/src/main/res/drawable/ic_qu_shadowsocks_launcher.xml similarity index 100% rename from src/main/res/drawable/ic_qu_shadowsocks_launcher.xml rename to mobile/src/main/res/drawable/ic_qu_shadowsocks_launcher.xml diff --git a/src/main/res/drawable/ic_social_share.xml b/mobile/src/main/res/drawable/ic_social_share.xml similarity index 100% rename from src/main/res/drawable/ic_social_share.xml rename to mobile/src/main/res/drawable/ic_social_share.xml diff --git a/src/main/res/drawable/ic_start_busy.xml b/mobile/src/main/res/drawable/ic_start_busy.xml similarity index 100% rename from src/main/res/drawable/ic_start_busy.xml rename to mobile/src/main/res/drawable/ic_start_busy.xml diff --git a/src/main/res/drawable/ic_start_connected.xml b/mobile/src/main/res/drawable/ic_start_connected.xml similarity index 100% rename from src/main/res/drawable/ic_start_connected.xml rename to mobile/src/main/res/drawable/ic_start_connected.xml diff --git a/src/main/res/drawable/ic_start_idle.xml b/mobile/src/main/res/drawable/ic_start_idle.xml similarity index 100% rename from src/main/res/drawable/ic_start_idle.xml rename to mobile/src/main/res/drawable/ic_start_idle.xml diff --git a/src/main/res/layout/dialog_acl_rule.xml b/mobile/src/main/res/layout/dialog_acl_rule.xml similarity index 100% rename from src/main/res/layout/dialog_acl_rule.xml rename to mobile/src/main/res/layout/dialog_acl_rule.xml diff --git a/src/main/res/layout/layout_about.xml b/mobile/src/main/res/layout/layout_about.xml similarity index 100% rename from src/main/res/layout/layout_about.xml rename to mobile/src/main/res/layout/layout_about.xml diff --git a/src/main/res/layout/layout_apps.xml b/mobile/src/main/res/layout/layout_apps.xml similarity index 100% rename from src/main/res/layout/layout_apps.xml rename to mobile/src/main/res/layout/layout_apps.xml diff --git a/src/main/res/layout/layout_apps_item.xml b/mobile/src/main/res/layout/layout_apps_item.xml similarity index 100% rename from src/main/res/layout/layout_apps_item.xml rename to mobile/src/main/res/layout/layout_apps_item.xml diff --git a/src/main/res/layout/layout_custom_rules.xml b/mobile/src/main/res/layout/layout_custom_rules.xml similarity index 100% rename from src/main/res/layout/layout_custom_rules.xml rename to mobile/src/main/res/layout/layout_custom_rules.xml diff --git a/src/main/res/layout/layout_global_settings.xml b/mobile/src/main/res/layout/layout_global_settings.xml similarity index 100% rename from src/main/res/layout/layout_global_settings.xml rename to mobile/src/main/res/layout/layout_global_settings.xml diff --git a/src/main/res/layout/layout_header.xml b/mobile/src/main/res/layout/layout_header.xml similarity index 100% rename from src/main/res/layout/layout_header.xml rename to mobile/src/main/res/layout/layout_header.xml diff --git a/src/main/res/layout/layout_list.xml b/mobile/src/main/res/layout/layout_list.xml similarity index 100% rename from src/main/res/layout/layout_list.xml rename to mobile/src/main/res/layout/layout_list.xml diff --git a/src/main/res/layout/layout_main.xml b/mobile/src/main/res/layout/layout_main.xml similarity index 100% rename from src/main/res/layout/layout_main.xml rename to mobile/src/main/res/layout/layout_main.xml diff --git a/src/main/res/layout/layout_profile.xml b/mobile/src/main/res/layout/layout_profile.xml similarity index 100% rename from src/main/res/layout/layout_profile.xml rename to mobile/src/main/res/layout/layout_profile.xml diff --git a/src/main/res/layout/layout_profile_config.xml b/mobile/src/main/res/layout/layout_profile_config.xml similarity index 100% rename from src/main/res/layout/layout_profile_config.xml rename to mobile/src/main/res/layout/layout_profile_config.xml diff --git a/src/main/res/layout/layout_tasker.xml b/mobile/src/main/res/layout/layout_tasker.xml similarity index 100% rename from src/main/res/layout/layout_tasker.xml rename to mobile/src/main/res/layout/layout_tasker.xml diff --git a/src/main/res/layout/toolbar_light_dark.xml b/mobile/src/main/res/layout/toolbar_light_dark.xml similarity index 100% rename from src/main/res/layout/toolbar_light_dark.xml rename to mobile/src/main/res/layout/toolbar_light_dark.xml diff --git a/src/main/res/menu/app_manager_menu.xml b/mobile/src/main/res/menu/app_manager_menu.xml similarity index 100% rename from src/main/res/menu/app_manager_menu.xml rename to mobile/src/main/res/menu/app_manager_menu.xml diff --git a/src/main/res/menu/custom_rules_menu.xml b/mobile/src/main/res/menu/custom_rules_menu.xml similarity index 100% rename from src/main/res/menu/custom_rules_menu.xml rename to mobile/src/main/res/menu/custom_rules_menu.xml diff --git a/src/main/res/menu/profile_config_menu.xml b/mobile/src/main/res/menu/profile_config_menu.xml similarity index 100% rename from src/main/res/menu/profile_config_menu.xml rename to mobile/src/main/res/menu/profile_config_menu.xml diff --git a/src/main/res/menu/profile_manager_menu.xml b/mobile/src/main/res/menu/profile_manager_menu.xml similarity index 100% rename from src/main/res/menu/profile_manager_menu.xml rename to mobile/src/main/res/menu/profile_manager_menu.xml diff --git a/src/main/res/menu/profile_share_popup.xml b/mobile/src/main/res/menu/profile_share_popup.xml similarity index 100% rename from src/main/res/menu/profile_share_popup.xml rename to mobile/src/main/res/menu/profile_share_popup.xml diff --git a/src/main/res/mipmap-hdpi/ic_launcher.png b/mobile/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-hdpi/ic_launcher.png rename to mobile/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/src/main/res/mipmap-mdpi/ic_launcher.png b/mobile/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-mdpi/ic_launcher.png rename to mobile/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/src/main/res/mipmap-xhdpi/ic_launcher.png b/mobile/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-xhdpi/ic_launcher.png rename to mobile/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mobile/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-xxhdpi/ic_launcher.png rename to mobile/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to mobile/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/src/main/res/raw/gtm_default_container b/mobile/src/main/res/raw/gtm_default_container similarity index 100% rename from src/main/res/raw/gtm_default_container rename to mobile/src/main/res/raw/gtm_default_container diff --git a/src/main/res/values-ja/strings.xml b/mobile/src/main/res/values-ja/strings.xml similarity index 100% rename from src/main/res/values-ja/strings.xml rename to mobile/src/main/res/values-ja/strings.xml diff --git a/src/main/res/values-ru/strings.xml b/mobile/src/main/res/values-ru/strings.xml similarity index 100% rename from src/main/res/values-ru/strings.xml rename to mobile/src/main/res/values-ru/strings.xml diff --git a/src/main/res/values-v21/dimen.xml b/mobile/src/main/res/values-v21/dimen.xml similarity index 100% rename from src/main/res/values-v21/dimen.xml rename to mobile/src/main/res/values-v21/dimen.xml diff --git a/src/main/res/values-v21/strings.xml b/mobile/src/main/res/values-v21/strings.xml similarity index 100% rename from src/main/res/values-v21/strings.xml rename to mobile/src/main/res/values-v21/strings.xml diff --git a/src/main/res/values-v21/styles.xml b/mobile/src/main/res/values-v21/styles.xml similarity index 100% rename from src/main/res/values-v21/styles.xml rename to mobile/src/main/res/values-v21/styles.xml diff --git a/src/main/res/values-zh-rCN/strings.xml b/mobile/src/main/res/values-zh-rCN/strings.xml similarity index 100% rename from src/main/res/values-zh-rCN/strings.xml rename to mobile/src/main/res/values-zh-rCN/strings.xml diff --git a/src/main/res/values-zh-rTW/strings.xml b/mobile/src/main/res/values-zh-rTW/strings.xml similarity index 100% rename from src/main/res/values-zh-rTW/strings.xml rename to mobile/src/main/res/values-zh-rTW/strings.xml diff --git a/src/main/res/values/arrays.xml b/mobile/src/main/res/values/arrays.xml similarity index 100% rename from src/main/res/values/arrays.xml rename to mobile/src/main/res/values/arrays.xml diff --git a/src/main/res/values/attrs.xml b/mobile/src/main/res/values/attrs.xml similarity index 100% rename from src/main/res/values/attrs.xml rename to mobile/src/main/res/values/attrs.xml diff --git a/src/main/res/values/colors.xml b/mobile/src/main/res/values/colors.xml similarity index 100% rename from src/main/res/values/colors.xml rename to mobile/src/main/res/values/colors.xml diff --git a/src/main/res/values/configs.xml b/mobile/src/main/res/values/configs.xml similarity index 100% rename from src/main/res/values/configs.xml rename to mobile/src/main/res/values/configs.xml diff --git a/src/main/res/values/dimen.xml b/mobile/src/main/res/values/dimen.xml similarity index 100% rename from src/main/res/values/dimen.xml rename to mobile/src/main/res/values/dimen.xml diff --git a/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml similarity index 100% rename from src/main/res/values/strings.xml rename to mobile/src/main/res/values/strings.xml diff --git a/src/main/res/values/styles.xml b/mobile/src/main/res/values/styles.xml similarity index 100% rename from src/main/res/values/styles.xml rename to mobile/src/main/res/values/styles.xml diff --git a/src/main/res/xml/pref_global.xml b/mobile/src/main/res/xml/pref_global.xml similarity index 100% rename from src/main/res/xml/pref_global.xml rename to mobile/src/main/res/xml/pref_global.xml diff --git a/src/main/res/xml/pref_profile.xml b/mobile/src/main/res/xml/pref_profile.xml similarity index 100% rename from src/main/res/xml/pref_profile.xml rename to mobile/src/main/res/xml/pref_profile.xml diff --git a/src/main/res/xml/shortcuts.xml b/mobile/src/main/res/xml/shortcuts.xml similarity index 100% rename from src/main/res/xml/shortcuts.xml rename to mobile/src/main/res/xml/shortcuts.xml diff --git a/src/main/res/xml/tracker.xml b/mobile/src/main/res/xml/tracker.xml similarity index 100% rename from src/main/res/xml/tracker.xml rename to mobile/src/main/res/xml/tracker.xml diff --git a/src/main/scala/be/mygod/preference/DialogPreferencePlus.scala b/mobile/src/main/scala/be/mygod/preference/DialogPreferencePlus.scala similarity index 100% rename from src/main/scala/be/mygod/preference/DialogPreferencePlus.scala rename to mobile/src/main/scala/be/mygod/preference/DialogPreferencePlus.scala diff --git a/src/main/scala/be/mygod/preference/EditTextPreference.scala b/mobile/src/main/scala/be/mygod/preference/EditTextPreference.scala similarity index 100% rename from src/main/scala/be/mygod/preference/EditTextPreference.scala rename to mobile/src/main/scala/be/mygod/preference/EditTextPreference.scala diff --git a/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala b/mobile/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala similarity index 100% rename from src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala rename to mobile/src/main/scala/be/mygod/preference/EditTextPreferenceDialogFragment.scala diff --git a/src/main/scala/be/mygod/preference/NumberPickerPreference.scala b/mobile/src/main/scala/be/mygod/preference/NumberPickerPreference.scala similarity index 100% rename from src/main/scala/be/mygod/preference/NumberPickerPreference.scala rename to mobile/src/main/scala/be/mygod/preference/NumberPickerPreference.scala diff --git a/src/main/scala/be/mygod/preference/NumberPickerPreferenceDialogFragment.scala b/mobile/src/main/scala/be/mygod/preference/NumberPickerPreferenceDialogFragment.scala similarity index 100% rename from src/main/scala/be/mygod/preference/NumberPickerPreferenceDialogFragment.scala rename to mobile/src/main/scala/be/mygod/preference/NumberPickerPreferenceDialogFragment.scala diff --git a/src/main/scala/be/mygod/preference/PreferenceCategory.scala b/mobile/src/main/scala/be/mygod/preference/PreferenceCategory.scala similarity index 100% rename from src/main/scala/be/mygod/preference/PreferenceCategory.scala rename to mobile/src/main/scala/be/mygod/preference/PreferenceCategory.scala diff --git a/src/main/scala/be/mygod/preference/PreferenceFragment.scala b/mobile/src/main/scala/be/mygod/preference/PreferenceFragment.scala similarity index 100% rename from src/main/scala/be/mygod/preference/PreferenceFragment.scala rename to mobile/src/main/scala/be/mygod/preference/PreferenceFragment.scala diff --git a/src/main/scala/be/mygod/preference/PreferenceGroupAdapter.scala b/mobile/src/main/scala/be/mygod/preference/PreferenceGroupAdapter.scala similarity index 100% rename from src/main/scala/be/mygod/preference/PreferenceGroupAdapter.scala rename to mobile/src/main/scala/be/mygod/preference/PreferenceGroupAdapter.scala diff --git a/src/main/scala/be/mygod/preference/SummaryPreference.scala b/mobile/src/main/scala/be/mygod/preference/SummaryPreference.scala similarity index 100% rename from src/main/scala/be/mygod/preference/SummaryPreference.scala rename to mobile/src/main/scala/be/mygod/preference/SummaryPreference.scala diff --git a/src/main/scala/com/github/shadowsocks/AboutFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/AboutFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/AboutFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/AboutFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/AppManager.scala b/mobile/src/main/scala/com/github/shadowsocks/AppManager.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/AppManager.scala rename to mobile/src/main/scala/com/github/shadowsocks/AppManager.scala diff --git a/src/main/scala/com/github/shadowsocks/BaseService.scala b/mobile/src/main/scala/com/github/shadowsocks/BaseService.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/BaseService.scala rename to mobile/src/main/scala/com/github/shadowsocks/BaseService.scala diff --git a/src/main/scala/com/github/shadowsocks/BootReceiver.scala b/mobile/src/main/scala/com/github/shadowsocks/BootReceiver.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/BootReceiver.scala rename to mobile/src/main/scala/com/github/shadowsocks/BootReceiver.scala diff --git a/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/GlobalSettingsFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/GlobalSettingsFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/GlobalSettingsFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/GlobalSettingsFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/GuardedProcess.scala b/mobile/src/main/scala/com/github/shadowsocks/GuardedProcess.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/GuardedProcess.scala rename to mobile/src/main/scala/com/github/shadowsocks/GuardedProcess.scala diff --git a/src/main/scala/com/github/shadowsocks/MainActivity.scala b/mobile/src/main/scala/com/github/shadowsocks/MainActivity.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/MainActivity.scala rename to mobile/src/main/scala/com/github/shadowsocks/MainActivity.scala diff --git a/src/main/scala/com/github/shadowsocks/ProfileConfigActivity.scala b/mobile/src/main/scala/com/github/shadowsocks/ProfileConfigActivity.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ProfileConfigActivity.scala rename to mobile/src/main/scala/com/github/shadowsocks/ProfileConfigActivity.scala diff --git a/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/ProfilesFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/ProfilesFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ProfilesFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/ProfilesFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/QRCodeDialog.scala b/mobile/src/main/scala/com/github/shadowsocks/QRCodeDialog.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/QRCodeDialog.scala rename to mobile/src/main/scala/com/github/shadowsocks/QRCodeDialog.scala diff --git a/src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala b/mobile/src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala rename to mobile/src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala diff --git a/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala b/mobile/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala rename to mobile/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksBackupAgent.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksBackupAgent.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksBackupAgent.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksBackupAgent.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNotification.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksNotification.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksNotification.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksNotification.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerActivity.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerActivity.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksRunnerActivity.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerActivity.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksTileService.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksTileService.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksTileService.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksTileService.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala rename to mobile/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala diff --git a/src/main/scala/com/github/shadowsocks/TaskerActivity.scala b/mobile/src/main/scala/com/github/shadowsocks/TaskerActivity.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/TaskerActivity.scala rename to mobile/src/main/scala/com/github/shadowsocks/TaskerActivity.scala diff --git a/src/main/scala/com/github/shadowsocks/TaskerReceiver.scala b/mobile/src/main/scala/com/github/shadowsocks/TaskerReceiver.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/TaskerReceiver.scala rename to mobile/src/main/scala/com/github/shadowsocks/TaskerReceiver.scala diff --git a/src/main/scala/com/github/shadowsocks/ToolbarFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/ToolbarFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/ToolbarFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/ToolbarFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/acl/Acl.scala b/mobile/src/main/scala/com/github/shadowsocks/acl/Acl.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/acl/Acl.scala rename to mobile/src/main/scala/com/github/shadowsocks/acl/Acl.scala diff --git a/src/main/scala/com/github/shadowsocks/acl/AclSyncJob.scala b/mobile/src/main/scala/com/github/shadowsocks/acl/AclSyncJob.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/acl/AclSyncJob.scala rename to mobile/src/main/scala/com/github/shadowsocks/acl/AclSyncJob.scala diff --git a/src/main/scala/com/github/shadowsocks/acl/CustomRulesFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/acl/CustomRulesFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/acl/CustomRulesFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/acl/CustomRulesFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/acl/DonaldTrump.scala b/mobile/src/main/scala/com/github/shadowsocks/acl/DonaldTrump.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/acl/DonaldTrump.scala rename to mobile/src/main/scala/com/github/shadowsocks/acl/DonaldTrump.scala diff --git a/src/main/scala/com/github/shadowsocks/acl/Subnet.scala b/mobile/src/main/scala/com/github/shadowsocks/acl/Subnet.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/acl/Subnet.scala rename to mobile/src/main/scala/com/github/shadowsocks/acl/Subnet.scala diff --git a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala b/mobile/src/main/scala/com/github/shadowsocks/database/DBHelper.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/database/DBHelper.scala rename to mobile/src/main/scala/com/github/shadowsocks/database/DBHelper.scala diff --git a/src/main/scala/com/github/shadowsocks/database/Profile.scala b/mobile/src/main/scala/com/github/shadowsocks/database/Profile.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/database/Profile.scala rename to mobile/src/main/scala/com/github/shadowsocks/database/Profile.scala diff --git a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala b/mobile/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/database/ProfileManager.scala rename to mobile/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala diff --git a/src/main/scala/com/github/shadowsocks/preferences/KcpCliPreferenceDialogFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/preferences/KcpCliPreferenceDialogFragment.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/preferences/KcpCliPreferenceDialogFragment.scala rename to mobile/src/main/scala/com/github/shadowsocks/preferences/KcpCliPreferenceDialogFragment.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/CloseUtils.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/CloseUtils.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/CloseUtils.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/CloseUtils.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/Constants.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/Constants.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/Constants.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/IOUtils.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/IOUtils.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/IOUtils.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/IOUtils.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/Parser.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/Parser.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/Parser.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/Parser.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/TaskerSettings.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/TaskerSettings.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/TaskerSettings.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/TaskerSettings.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/TrafficMonitor.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/TrafficMonitor.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/TrafficMonitor.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/TrafficMonitor.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/Typefaces.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/Typefaces.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/Typefaces.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/Typefaces.scala diff --git a/src/main/scala/com/github/shadowsocks/utils/Utils.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/Utils.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/utils/Utils.scala rename to mobile/src/main/scala/com/github/shadowsocks/utils/Utils.scala diff --git a/src/main/scala/com/github/shadowsocks/widget/BoundedCardView.scala b/mobile/src/main/scala/com/github/shadowsocks/widget/BoundedCardView.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/widget/BoundedCardView.scala rename to mobile/src/main/scala/com/github/shadowsocks/widget/BoundedCardView.scala diff --git a/src/main/scala/com/github/shadowsocks/widget/BoundedGridLayout.scala b/mobile/src/main/scala/com/github/shadowsocks/widget/BoundedGridLayout.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/widget/BoundedGridLayout.scala rename to mobile/src/main/scala/com/github/shadowsocks/widget/BoundedGridLayout.scala diff --git a/src/main/scala/com/github/shadowsocks/widget/BoundedView.scala b/mobile/src/main/scala/com/github/shadowsocks/widget/BoundedView.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/widget/BoundedView.scala rename to mobile/src/main/scala/com/github/shadowsocks/widget/BoundedView.scala diff --git a/src/main/scala/com/github/shadowsocks/widget/UndoSnackbarManager.scala b/mobile/src/main/scala/com/github/shadowsocks/widget/UndoSnackbarManager.scala similarity index 100% rename from src/main/scala/com/github/shadowsocks/widget/UndoSnackbarManager.scala rename to mobile/src/main/scala/com/github/shadowsocks/widget/UndoSnackbarManager.scala diff --git a/src/main/scala/scala/collection/mutable/SortedList.scala b/mobile/src/main/scala/scala/collection/mutable/SortedList.scala similarity index 100% rename from src/main/scala/scala/collection/mutable/SortedList.scala rename to mobile/src/main/scala/scala/collection/mutable/SortedList.scala