version:1.0

fix:修复bug
update:
This commit is contained in:
2023-03-12 19:18:15 +08:00
parent 96d9f21b2b
commit eeaf2a8c08
23 changed files with 292 additions and 115 deletions

View File

@@ -39,6 +39,8 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
@@ -49,11 +51,17 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainActivity extends BaseActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private RelativeLayout search_layout;
private ImageView iv_download, iv_appicon;
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;
private long exitTime = 0;
@BindView(R.id.search_layout)
RelativeLayout search_layout;
@BindView(R.id.iv_download)
ImageView iv_download;
@BindView(R.id.iv_appicon)
ImageView iv_appicon;
@BindView(R.id.main_sliding_tab_layout)
SlidingTabLayout mSlidingTabLayout;
@BindView(R.id.main_view_pager)
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -63,69 +71,47 @@ public class MainActivity extends BaseActivity {
starService();
}
private void starService() {
startService(new Intent(this, GuardService.class));
startService(new Intent(this, StepService.class));
startService(new Intent(this, MainService.class));
startService(new Intent(this, DownloadService.class));
}
@Override
protected int setLayoutResourceID() {
return R.layout.activity_main;
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onStart() {
super.onStart();
// getUserInfo();
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e(TAG, "onConfigurationChanged");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.e(TAG, "onSaveInstanceState");
}
@Override
protected void initView() {
iv_appicon = findViewById(R.id.iv_appicon);
ButterKnife.bind(this);
iv_appicon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity(new Intent(MainActivity.this, AboutActivity.class));
}
});
iv_download = findViewById(R.id.iv_download);
iv_download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, DownloadManagerActivity.class));
startActivity(new Intent(MainActivity.this, ManagerAppActivity.class));
}
});
search_layout = findViewById(R.id.search_layout);
search_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, SearcherActivity.class));
}
});
mSlidingTabLayout = findViewById(R.id.main_sliding_tab_layout);
mViewPager = findViewById(R.id.main_view_pager);
initTabLayout();
}
@Override
protected void initData() {
// getAllAppPackageName();
}
private void starService() {
startService(new Intent(this, GuardService.class));
startService(new Intent(this, StepService.class));
startService(new Intent(this, MainService.class));
startService(new Intent(this, DownloadService.class));
}
private void initTabLayout() {
final List<Fragment> fragmentList = new ArrayList<>();
fragmentList.add(new FeaturedFragment());
@@ -149,8 +135,26 @@ public class MainActivity extends BaseActivity {
}
@Override
protected void initData() {
// getAllAppPackageName();
protected void onResume() {
super.onResume();
}
@Override
protected void onStart() {
super.onStart();
// getUserInfo();
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e(TAG, "onConfigurationChanged");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.e(TAG, "onSaveInstanceState");
}
@Override
@@ -211,9 +215,10 @@ public class MainActivity extends BaseActivity {
return false;
}
return super.onKeyDown(keyCode, event);
}
private long exitTime = 0;
public void exit() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
ToastUtil.show("再按一次退出程序");

View File

@@ -109,7 +109,7 @@ public class MoreAppActivity extends BaseActivity {
private void getAdminApp() {
NetInterfaceManager.getInstance()
.getAdminAppObservable()
.getAdminAppByClassObservable(2)
.subscribe(new Observer<BaseResponse<List<AppInfo>>>() {
@Override
public void onSubscribe(Disposable d) {

View File

@@ -2,6 +2,8 @@ package com.uiui.zyappstore.adapter;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,6 +30,7 @@ import com.uiui.zyappstore.bean.GlideCircleWithBorder;
import com.uiui.zyappstore.utils.ApkUtils;
import com.uiui.zyappstore.utils.FileUtils;
import com.uiui.zyappstore.utils.StorageUtils;
import com.uiui.zyappstore.utils.ToastUtil;
import com.uiui.zyappstore.utils.Utils;
import org.jetbrains.annotations.NotNull;
@@ -134,6 +137,12 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.Holder> {
if (installed && !update) {
ApkUtils.openApp(mContext, appInfo.getApp_package());
} else {
int is_storeinstall = Settings.Global.getInt(mContext.getContentResolver(), "setting_is_storeinstall", 0);
Log.e(TAG, "onClick: " + is_storeinstall);
if (is_storeinstall == 0) {
ToastUtil.show("应用市场已被禁止安装");
return;
}
Utils.addPackageToWhiteList(mContext, appInfo.getApp_package());
DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(appInfo.getApp_url());
if (null != entity) {

View File

@@ -216,7 +216,8 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager
cl_5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), ManagerAppActivity.class));
// startActivity(new Intent(getActivity(), ManagerAppActivity.class));
openAppClass(5);
}
});
tv_exclusive_app.setOnClickListener(new View.OnClickListener() {
@@ -254,9 +255,10 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager
// } else {
// rv_popular.setLayoutManager(new LinearLayoutManager(mContext));
// }
rv_popular.setAdapter(mPopularAppAdapter);
GridLayoutManager gridLayoutManager2 = new GridLayoutManager(mContext, 2);
rv_exclusive.setLayoutManager(gridLayoutManager2);
rv_popular.setAdapter(mPopularAppAdapter);
rv_exclusive.setAdapter(mExclusiveAppAdapter);
}
@@ -333,13 +335,13 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager
}
synchronized private void initAPPData() {
int setting_admin_app = Settings.System.getInt(mContext.getContentResolver(), "setting_admin_app", 1);
if (setting_admin_app == 0) {
getAllAppInfo();
} else {
getAllAppInfo();
// int setting_admin_app = Settings.System.getInt(mContext.getContentResolver(), "setting_admin_app", 1);
// if (setting_admin_app == 0) {
getAdminApp();
}
// } else {
// getAllAppInfo();
// getAdminApp();
// }
getBanner();
getAppClass();
}
@@ -524,7 +526,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager
private void getAdminApp() {
NetInterfaceManager.getInstance()
.getAdminAppObservable()
.getAdminAppByClassObservable(2)
.subscribe(new Observer<BaseResponse<List<AppInfo>>>() {
@Override
public void onSubscribe(Disposable d) {

View File

@@ -208,7 +208,9 @@ public class NetInterfaceManager {
set.add(JGYUtils.UMTK11Tag);
} else if (platform == JGYUtils.UZY12Platform) {
set.add(JGYUtils.UZY12Tag);
} else if (platform == JGYUtils.TeclastMTK12Platform) {
} else if (platform == JGYUtils.Cube8183Platform) {
set.add(JGYUtils.Cube8183Tag);
}else if (platform == JGYUtils.Teclast8183Platform) {
set.add(JGYUtils.TeclastMTK12Tag);
}
});

View File

@@ -12,6 +12,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
@@ -37,10 +38,12 @@ import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class ApkUtils {
private static final String TAG = ApkUtils.class.getSimpleName();
public static synchronized boolean getRootAhth() {
Process process = null;
@@ -72,17 +75,13 @@ public class ApkUtils {
}
}
public static void openApp(Context context, View view) {
try {
Intent intent = context.getPackageManager().getLaunchIntentForPackage((String) view.getTag(R.string.download_btn_had));
context.startActivity(intent);
} catch (Exception e) {
Toast.makeText(context, R.string.open_app_fail, Toast.LENGTH_LONG).show();
}
return;
}
public static void openApp(Context context, String packageName) {
int setting_other_appInstaller = Settings.Global.getInt(context.getContentResolver(), "setting_other_appInstaller", 0);
Log.e(TAG, "openApp: " + setting_other_appInstaller);
if (setting_other_appInstaller == 0) {
ToastUtil.show("已禁止应用打开");
return;
}
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent != null) {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -636,7 +635,7 @@ public class ApkUtils {
}
}
static HashSet<String> fuxiaoyingApp = new HashSet<String>() {{
private static final HashSet<String> fuxiaoyingApp = new HashSet<String>() {{
this.add("com.fuying.fuxiaoying");
this.add("com.zhiduoke.fxy");
this.add("com.fuying.english");
@@ -646,6 +645,54 @@ public class ApkUtils {
this.add("com.fuying.aobama.pad");
}};
private static final Set<String> JXWAPP = new HashSet<String>() {{
this.add("com.uiui.zybrowser");
this.add("com.study.flashplayer");
this.add("com.jxw.laboratory");
this.add("com.safe.uiui");
this.add("software.ecenter.study");
this.add("com.iflytek.speechcloud");
this.add("com.jxw.online_study");
this.add("com.jxw.jinfangyici");
this.add("air.com.zhihuiyoujiao.flashplayer");
this.add("com.ll.ahschool");
this.add("com.jxw.classtable");
this.add("com.jxw.teacher.video");
this.add("com.jxw.game");
this.add("com.jxw.yyhb");
this.add("com.jxw.zncd");
this.add("com.jxw.dmxcy");
this.add("com.jxw.bishunguize");
this.add("com.jxw.characterlearning");
this.add("com.jxw.newyouer.video");
this.add("com.iflytek.cyber.iot.show.core");
this.add("com.jxw.huiben");
this.add("com.jxw.liancichengju");
this.add("com.jxw.singsound");
this.add("com.jxw.jxwcalculator");
this.add("com.uiui.zyappstore");
this.add("com.jxw.launcher");
this.add("com.jxw.jxwbook");
this.add("com.uiui.zysn");
this.add("com.jxw.question");
this.add("com.example.arithmeticformula");
this.add("com.jxw.schultegrid");
this.add("com.jxw.mskt.video");
this.add("com.jxw.wuweijidanci");
this.add("com.tech.translate");
this.add("com.jxw.studydigital");
this.add("com.jxw.englishsoundmark");
this.add("com.jxw.handwrite");
this.add("com.example.pianpangbushou");
this.add("com.jxw.learnchinesepinyin");
this.add("com.example.elementcycleapp");
this.add("com.jxw.examsystem");
this.add("com.jxw.letterstudynew");
this.add("com.jxw.yuwenxiezuo");
this.add("com.jxw.bihuamingcheng");
}};
synchronized public static List<LocalApp> getLocalApp(Context context) {
List<LocalApp> appList = new ArrayList<>();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
@@ -669,6 +716,9 @@ public class ApkUtils {
continue;
}
bean.setPackageName(packageName);
if (JXWAPP.contains(packageName)) {
bean.setCanUnintall(false);
}
Drawable icon = resolveInfoList.get(i).loadIcon(context.getPackageManager());
bean.setIcon(icon);
// if (forceAppSet.contains(packageName)) {
@@ -753,9 +803,10 @@ public class ApkUtils {
public static HashSet<String> ownApp = new HashSet<String>() {{
this.add(BuildConfig.APPLICATION_ID);
this.add("com.android.uiuios");
this.add("com.uiui.os");
this.add("com.uiui.browser");
this.add("com.uiui.sn");
this.add("com.uiui.zyos");
this.add("com.uiui.zybrowser");
this.add("com.uiui.zysn");
this.add("com.uiui.aios");
this.add("com.safe.uiui");
}};
}

View File

@@ -43,7 +43,8 @@ public class JGYUtils {
public static final int ZhanruiPlatform = 3;
public static final int UMTK11Platform = 4;
public static final int UZY12Platform = 7;
public static final int TeclastMTK12Platform = 8;
public static final int Cube8183Platform = 8;
public static final int Teclast8183Platform = 9;
public static final int UnknowPlatform = 0;
public static final String MTKTag = "MTK";
@@ -51,7 +52,8 @@ public class JGYUtils {
public static final String NewZhanruiTag = "新展锐";
public static final String UMTK11Tag = "UMTK11";
public static final String UZY12Tag = "UZY12";
public static final String TeclastMTK12Tag = "TeclastMTK12";
public static final String Cube8183Tag = "cube8183";
public static final String TeclastMTK12Tag = "teclast8183";
private JGYUtils(Context context) {
@@ -316,9 +318,12 @@ public class JGYUtils {
} else if (UZY12Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "UZY12");
return UZY12Platform;
}else if (TeclastMTK12Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "TeclastMTK12");
return TeclastMTK12Platform;
}else if (Cube8183Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "cube8183");
return Cube8183Platform;
} else if (TeclastMTK12Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "teclast8183");
return Teclast8183Platform;
} else {
Log.i(TAG, "checkAppPlatform: " + "没有数据");
return UnknowPlatform;
@@ -351,7 +356,9 @@ public class JGYUtils {
} else if (UZY12Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(UZY12Platform);
} else if (TeclastMTK12Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(TeclastMTK12Platform);
getAppPlatformCallback.AppPlatform(Teclast8183Platform);
} else if (Cube8183Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(Cube8183Platform);
} else {
getAppPlatformCallback.AppPlatform(UnknowPlatform);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -38,15 +38,14 @@
android:textStyle="bold" />
</LinearLayout>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/local_app_refresh_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:background="@color/white"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2">
<RelativeLayout
@@ -71,7 +70,5 @@
</ImageView>
</RelativeLayout>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -6,16 +6,18 @@
android:layout_height="match_parent"
tools:context=".activity.MainActivity">
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:id="@+id/linearLayout4"
android:layout_width="0dp"
android:layout_height="@dimen/dp_24"
android:layout_marginBottom="@dimen/dp_4"
android:orientation="horizontal">
android:orientation="horizontal"
app:layout_constraintEnd_toStartOf="@+id/iv_download"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_appicon"
@@ -70,7 +72,6 @@
</RelativeLayout>
<ImageView
android:id="@+id/iv_download"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
@@ -79,12 +80,25 @@
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/iv_download"
android:layout_width="@dimen/dp_12"
android:layout_height="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_8"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:src="@drawable/icon_download_task"
app:layout_constraintBottom_toBottomOf="@+id/linearLayout4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/linearLayout4" />
<com.flyco.tablayout.SlidingTabLayout
android:id="@+id/main_sliding_tab_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_20"
android:background="@color/white"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/linearLayout4"
app:tl_indicator_style="TRIANGLE"
app:tl_tab_space_equal="true"
app:tl_textBold="SELECT"
@@ -98,6 +112,10 @@
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white"
android:overScrollMode="never" />
</LinearLayout>
android:overScrollMode="never"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/main_sliding_tab_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -9,7 +9,7 @@
android:id="@+id/featured_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/adapter_selector_default"
android:background="@color/colorPrimary"
app:srlAccentColor="@color/colorAccent"
app:srlPrimaryColor="@color/colorPrimary">

View File

@@ -6,16 +6,18 @@
android:layout_height="match_parent"
tools:context=".activity.MainActivity">
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:id="@+id/linearLayout4"
android:layout_width="0dp"
android:layout_height="@dimen/dp_24"
android:layout_marginBottom="@dimen/dp_4"
android:orientation="horizontal">
android:orientation="horizontal"
app:layout_constraintEnd_toStartOf="@+id/iv_download"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_appicon"
@@ -70,7 +72,6 @@
</RelativeLayout>
<ImageView
android:id="@+id/iv_download"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
@@ -79,12 +80,25 @@
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/iv_download"
android:layout_width="@dimen/dp_12"
android:layout_height="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_8"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:src="@drawable/icon_download_task"
app:layout_constraintBottom_toBottomOf="@+id/linearLayout4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/linearLayout4" />
<com.flyco.tablayout.SlidingTabLayout
android:id="@+id/main_sliding_tab_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_20"
android:background="@color/white"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/linearLayout4"
app:tl_indicator_style="TRIANGLE"
app:tl_tab_space_equal="true"
app:tl_textBold="SELECT"
@@ -98,6 +112,10 @@
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white"
android:overScrollMode="never" />
</LinearLayout>
android:overScrollMode="never"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/main_sliding_tab_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -9,7 +9,7 @@
android:id="@+id/featured_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/adapter_selector_default"
android:background="@color/colorPrimary"
app:srlAccentColor="@color/colorAccent"
app:srlPrimaryColor="@color/colorPrimary">

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#efefef</color>
<color name="colorPrimary">#f6f6f6</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#4880ff</color>
<!-- <color name="colorPrimary">#008577</color>-->
@@ -20,7 +20,7 @@
<color name="search">#FFFFFF</color>
<color name="red">#d64743</color>
<color name="blue">#00a0e9</color>
<color name="adapter_selector_default">#e8e7e7</color>
<color name="adapter_selector_default">#f3f0f0</color>
<color name="activation_color">#4880ff</color>
</resources>

View File

@@ -12,10 +12,10 @@
<string name="popular_recommendation">热门推荐</string>
<string name="more_app">更多…</string>
<string name="class_shopping">购物</string>
<string name="class_popular">热门</string>
<string name="class_health">养生</string>
<string name="class_video">影音</string>
<string name="class_entertainment">娱乐</string>
<string name="class_manage">管理</string>
<string name="class_shopping">热门推荐</string>
<string name="class_popular">在线学习</string>
<string name="class_health">学霸必备</string>
<string name="class_video">偏科助手</string>
<string name="class_entertainment">基础工具</string>
<string name="class_manage">学习软件</string>
</resources>