{"id":20031161,"url":"https://github.com/qyxxjd/baseproject","last_synced_at":"2025-05-05T04:31:24.560Z","repository":{"id":88999468,"uuid":"76015426","full_name":"qyxxjd/BaseProject","owner":"qyxxjd","description":"android base project","archived":false,"fork":false,"pushed_at":"2018-05-30T07:18:29.000Z","size":778,"stargazers_count":48,"open_issues_count":0,"forks_count":16,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-08T16:55:11.972Z","etag":null,"topics":["android","base","basic","common","project"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qyxxjd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-09T08:10:56.000Z","updated_at":"2023-06-11T06:15:39.000Z","dependencies_parsed_at":"2023-06-13T12:30:18.225Z","dependency_job_id":null,"html_url":"https://github.com/qyxxjd/BaseProject","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qyxxjd%2FBaseProject","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qyxxjd%2FBaseProject/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qyxxjd%2FBaseProject/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qyxxjd%2FBaseProject/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qyxxjd","download_url":"https://codeload.github.com/qyxxjd/BaseProject/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252439610,"owners_count":21748042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","base","basic","common","project"],"created_at":"2024-11-13T09:31:20.816Z","updated_at":"2025-05-05T04:31:24.554Z","avatar_url":"https://github.com/qyxxjd.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp\u003e\n  \u003ca href=\"https://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ICE_CREAM_SANDWICH\"\u003e\u003cimg src=\"https://img.shields.io/badge/API-14%2B-blue.svg?style=flat\" alt=\"API\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/express.svg?maxAge=2592000\" alt=\"License\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n`BaseProject`是一个简易的`Android`基础项目，方便您快速进行开发。\n\n#### 基础项目：\n\n- `EasyPermissions (v1.2.0)`\n- `BaseActivity`、`BaseFragment`\n- `Activity`栈管理\n- 异常信息收集\n- 日志打印\n- `Android6.0`权限管理\n- 通用适配器  [请参考CommonAdapter](https://github.com/qyxxjd/CommonAdapter)\n\n`Gradle`依赖\n```gradle\ndependencies {\n    implementation 'com.classic.android:core:1.6'\n}\n```\n\n#### 基于`RxJava`的版本： [示例代码点这里](https://github.com/qyxxjd/RxJava2Demo)\n\n- 包含基础项目的所有功能\n- 集成`RxJava (v2.1.9)`、`RxAndroid (v2.0.1)`\n- `RxActivity`、`RxFragment`\n- 常用方法封装\n\n`Gradle`依赖\n```gradle\ndependencies {\n    implementation 'com.classic.android:rxjava:2.1'\n}\n```\n\n#### 基于`OkHttp`的版本： [示例代码点这里](https://github.com/qyxxjd/RxJava2Demo)\n\n- 包含基础项目、`RxJava`版本的所有功能\n- 集成`OkHttp (v3.9.1)`、`Retrofit (v2.3.0)`\n- 网络相关的一些封装\n\n`Gradle`依赖\n```gradle\ndependencies {\n    implementation 'com.classic.android:okhttp:2.1'\n}\n```\n\n#### 工具类：\n\n`Gradle`依赖\n```gradle\ndependencies {\n    implementation 'com.classic.android:utils:1.1'\n}\n```\n\n| 文件名 | 描述 |\n| ----- | ----- |\n| [AppInfoUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/AppInfoUtil.java) | 应用程序相关信息工具类 |\n| [BitmapUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/BitmapUtil.java) | `bitmap`工具类 |\n| [ByteUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/ByteUtil.java) | 字节处理工具类 |\n| [CloseUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/CloseUtil.java) | `Closeable`工具类 |\n| [ConversionUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/ConversionUtil.java) | 单位转换工具类 |\n| [CursorUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/CursorUtil.java) | `Cursor`工具类 |\n| [DataUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/DataUtil.java) | 数据非空检查工具类 |\n| [DateUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/DateUtil.java) | 日期操作工具类 |\n| [DeviceUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/DeviceUtil.java) | 设备信息工具类 |\n| [EditTextUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/EditTextUtil.java) | 文本输入框工具类 |\n| [FileUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/FileUtil.java) | 文件操作工具类 |\n| [HtmlUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/HtmlUtil.java) | `HTML`处理类 |\n| [IntentUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/IntentUtil.java) | `Intent`工具类 |\n| [IpUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/IpUtil.java) | 获取设备`IP`地址 |\n| [KeyBoardUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/KeyBoardUtil.java) | 输入法工具类 |\n| [MatcherUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/MatcherUtil.java) | 正则匹配工具类 |\n| [MoneyUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/MoneyUtil.java) | 高精度数据计算工具类 |\n| [NetworkUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/NetworkUtil.java) | 网络状态工具类 |\n| [ResourceUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/ResourceUtil.java) | `Assets`、`Raw`资源文件操作工具类 |\n| [SizeUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/SizeUtil.java) | 字节、毫秒相关常量 |\n| [StringUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/StringUtil.java) | 字符串工具类 |\n| [ToastUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/ToastUtil.java) | `Toast`工具类 |\n| [ViewHolder](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/ViewHolder.java) | `View`复用工具类 |\n| [WifiHelper](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/WifiHelper.java) | `WIFI`工具类 |\n| [WindowUtil](https://github.com/qyxxjd/BaseProject/blob/master/utils/src/main/java/com/classic/android/utils/WindowUtil.java) | 屏幕相关工具类 |\n\n\n## 使用步骤\n\n第一步：按需添加依赖\n\n第二步：\n```java\npublic class YourApplication extends Application {\n\n    @Override public void onCreate() {\n        super.onCreate();\n\n        ...\n\n        final BasicProject.Builder builder = new BasicProject.Builder()\n                .setDebug(BuildConfig.DEBUG)\n                .setRootDirectoryName(getPackageName())\n                //自定义异常信息处理，实现ICrashProcess\n                .setExceptionHandler(new CustomCrashProcessImpl())\n                .setLog(BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE);\n\n        BasicProject.config(builder);\n    }\n}\n```\n\n## 代码示例\n\nActivity示例\n```java\npublic class TestActivity extends BaseActivity {\n    private RecyclerView mRecyclerView;\n\n    @Override public int getLayoutResId() {\n        return R.layout.activity_main;\n    }\n\n    //初始化一些数据\n    @Override public void initData() {\n        super.initData();\n        Intent intent = getIntent();\n        params = intent.getStringExtra(...);\n    }\n\n    //初始化view\n    @Override public void initView(Bundle savedInstanceState) {\n        super.initView(savedInstanceState);\n        mRecyclerView = (RecyclerView) findViewById(R.id.main_rv);\n        LinearLayoutManager manager = new LinearLayoutManager(this);\n        manager.setOrientation(LinearLayoutManager.VERTICAL);\n        mRecyclerView.setLayoutManager(manager);\n        mRecyclerView.setHasFixedSize(true);\n        mRecyclerView.setItemAnimator(new DefaultItemAnimator());\n\n        if(savedInstanceState == null){\n            /**\n             * 使用Fragment\n             * 参数1：被替换为Fragment的视图id\n             * 参数2：BaseFragment对象\n             */\n            changeFragment(R.id.fragment_layout, new ImageFragment());\n        }\n\n    }\n\n\n    //以下为可选方法，根据需要进行重载.\n    //方法执行顺序：\n    //onSetContentViewBefore() --\u003e initData() --\u003e initView(Bundle savedInstanceState) --\u003e register()\n\n    //这里可以注册一些广播、服务\n    @Override public void register() { }\n    //注销广播、服务\n    @Override public void unRegister() { }\n    //只有第一次才会执行，这里可以做一些界面功能引导\n    @Override public void onFirst() { }\n    //这个方法会在setContentView(...)方法之前执行\n    @Override public void onSetContentViewBefore() { }\n    //view点击事件统一处理\n    @Override public void viewClick(View v) { }\n}\n```\n\nFragment示例\n```java\npublic class TestFragment extends BaseFragment {\n    private TextView mTitle;\n\n    @Override public int getLayoutResId() {\n        return R.layout.activity_listview_item;\n    }\n\n    @Override public void initView(View parentView, Bundle savedInstanceState) {\n        super.initView(parentView, savedInstanceState);\n        mTitle = (TextView) parentView.findViewById(R.id.item_title_tv);\n    }\n\n    //以下为可选方法，根据需要进行重载.\n    //方法执行顺序：\n    //initData() --\u003e initView(View parentView, Bundle savedInstanceState) --\u003e register()\n\n    //这里可以注册一些广播、服务\n    @Override public void register() { }\n    //注销广播、服务\n    @Override public void unRegister() { }\n    //只有第一次才会执行，这里可以做一些界面功能引导\n    @Override public void onFirst() { }\n    @Override public void initData() { }\n    //view点击事件统一处理\n    @Override public void viewClick(View v) { }\n\n    //Fragment被切换到前台时调用\n    @Override public void onFragmentShow() { }\n    //Fragment被切换到后台时调用\n    @Override public void onFragmentHide() { }\n}\n```\n\n启动页示例\n```java\npublic class SplashActivity extends BaseSplashActivity {\n\n    @Override protected void setSplashResources(List\u003cSplashImgResource\u003e resources) {\n        /**\n         * SplashImgResource参数:\n         * mResId - 图片资源的ID。\n         * playerTime - 图片资源的播放时间，单位为毫秒。。\n         * startAlpha - 图片资源开始时的透明程度。0-255之间。\n         * isExpand - 如果为true，则图片会被拉伸至全屏幕大小进行展示，否则按原大小展示。\n         */\n        resources.add(new SplashImgResource(R.mipmap.splash, 1500, 100f, true));\n        resources.add(new SplashImgResource(R.mipmap.splash1, 1500, 100f, true));\n        resources.add(new SplashImgResource(R.mipmap.splash2, 1500, 100f, true));\n    }\n    \n    @Override protected boolean isAutoStartNextActivity() {\n        return false;\n    }\n    @Override protected Class\u003c?\u003e nextActivity() {\n        return null;\n        //如果isAutoStartNextActivity设置为true,这里需要指定跳转的activity\n        //return MainActivity.class;\n    }\n    \n    @Override protected void runOnBackground() {\n        //这里可以执行耗时操作、初始化工作\n        //请注意：如果执行了耗时操作，那么启动页会等到耗时操作执行完才会进行跳转\n        //try {\n        //  Thread.sleep(15 * 1000);\n        //} catch (InterruptedException e) {\n        //  e.printStackTrace();\n        //}\n    }\n}\n```\n\n打印日志  [更多使用方法点这里](https://github.com/elvishew/xLog)\n```java\nXLog.d(content);\nXLog.e(content);\nXLog.w(content);\nXLog.v(content);\nXLog.json(jsonContent);\nXLog.xml(xmlContent);\n```\n\n\nAndroid6.0权限管理  [更多使用方法点这里](https://github.com/googlesamples/easypermissions)\n```java\n//以使用相机为例，在Activity/Fragment添加以下代码\n\nprivate static final int REQUEST_CODE_CAMERA = 101;//请求相机权限的requestCode\n\n@AfterPermissionGranted(REQUEST_CODE_CAMERA)\npublic void useCamera() {\n    if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA)) {\n        ToastUtil.showToast(getApplicationContext(), \"相机权限已授权,可以开始使用相机了\");\n    } else {\n        //请求权限\n        EasyPermissions.requestPermissions(this, \"应用需要访问你的相机进行拍照\",\n                                           REQUEST_CODE_CAMERA, Manifest.permission.CAMERA);\n    }\n}\n\n@Override\npublic void onPermissionsGranted(int requestCode, List\u003cString\u003e perms) {\n    //用户授权成功\n}\n\n@Override\npublic void onPermissionsDenied(int requestCode, List\u003cString\u003e perms) {\n    //用户拒绝授权\n}\n```\n\n\n## 感谢\n\n[XLog](https://github.com/elvishew/xLog)\n\n[EasyPermissions](https://github.com/googlesamples/easypermissions)\n\n\n## 关于\n\n* Blog: [http://blog.csdn.net/qy1387](http://blog.csdn.net/qy1387)\n* Email: [pgliubin@gmail.com](http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme\u0026email=pgliubin@gmail.com)\n\n## License\n\n```\nCopyright 2015 classic\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqyxxjd%2Fbaseproject","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqyxxjd%2Fbaseproject","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqyxxjd%2Fbaseproject/lists"}