Skip to content

Commit

Permalink
重新调整项目架构,拆分成多个Moduel
Browse files Browse the repository at this point in the history
  • Loading branch information
880634 committed Nov 30, 2018
1 parent 73b9a47 commit 5ec9b27
Show file tree
Hide file tree
Showing 108 changed files with 4,362 additions and 4,137 deletions.
6 changes: 5 additions & 1 deletion ProjectDetails.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
* app:关于 APP 功能实现的业务逻辑代码,集成了一些常用的框架

* baselibrary:只存放关于技术实现的代码,不集成任何框架
* base:只存放关于技术实现的代码,不集成任何框架

* widget:自定义一些精品的 View

* umeng:集成友盟 SDK 相关文件

> 本项目基于最新的 Android SDK 28 编译,[点击此处查看配置](build.gradle),最低安装要求为 Android 4.0
Expand Down
10 changes: 6 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,12 @@ dependencies {
// 依赖 libs 目录下所有 Jar 包
implementation fileTree(include: ['*.jar'], dir: 'libs')
// 基础库(不包任何第三方框架)
implementation project(':baselibrary')
implementation project(':base')
// 自定义 View
implementation project(':widget')
// 友盟
implementation project(':umeng')

// 示例:添加一个 aar 包
// implementation(name: 'password_dialog', ext: 'aar')

Expand Down Expand Up @@ -115,9 +120,6 @@ dependencies {
// ButterKnife注解库:https://github.com/JakeWharton/butterknife
implementation "com.jakewharton:butterknife:$rootProject.ext.butterknifeVersion"
annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.ext.butterknifeVersion"

// 友盟统计
compileOnly 'com.umeng.analytics:analytics:6.1.4'
}

repositories {
Expand Down
Binary file removed app/libs/umeng-analytics-v6.1.2.jar
Binary file not shown.
19 changes: 14 additions & 5 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,6 @@
public void openFileChooser(...);
}

#友盟统计
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}

#极光推送
-dontoptimize
-dontpreverify
Expand All @@ -225,3 +220,17 @@
-keep public class android.support.design.R$* { *; }

########################################################

#友盟统计
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep public class [您的应用包名].R$*{
public static final int *;
}
29 changes: 7 additions & 22 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,17 @@
<!-- 联网权限 -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- 友盟统计 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<application
android:name=".common.CommonApplication"
android:name="com.hjq.demo.base.MyApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher"
android:theme="@style/AppTheme">

<!-- 友盟统计 -->
<meta-data
android:name="UMENG_APPKEY"
android:value="XXXXXXXXXXXXXXXXXXXXXXXX" /><!-- 要注意更换key -->

<!-- 友盟多渠道打包 -->
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />

<!-- 启动页面(因为使用了LauncherTheme,所以不要给这个Activity设置screenOrientation属性,会导致崩溃) -->
<activity
android:name=".ui.activity.LauncherActivity"
android:name="com.hjq.demo.ui.activity.LauncherActivity"
android:theme="@style/LauncherTheme">

<!-- 程序入口 -->
Expand All @@ -52,29 +37,29 @@

<!-- 主页界面 -->
<activity
android:name=".ui.activity.HomeActivity"
android:name="com.hjq.demo.ui.activity.HomeActivity"
android:alwaysRetainTaskState="true"
android:launchMode="singleTop" />

<!-- 登录界面 -->
<activity
android:name=".ui.activity.LoginActivity"
android:name="com.hjq.demo.ui.activity.LoginActivity"
android:launchMode="singleTop" />

<!-- 注册界面 -->
<activity
android:name=".ui.activity.RegisterActivity"
android:name="com.hjq.demo.ui.activity.RegisterActivity"
android:launchMode="singleTop" />

<!-- 关于界面 -->
<activity
android:name=".ui.activity.AboutActivity"
android:name="com.hjq.demo.ui.activity.AboutActivity"
android:label="@string/about_text"
android:launchMode="singleTop" />

<!-- 浏览器界面 -->
<activity
android:name=".ui.activity.WebActivity"
android:name="com.hjq.demo.ui.activity.WebActivity"
android:launchMode="singleTop" />

</application>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,133 +1,129 @@
package com.hjq.demo.common;

import android.content.pm.ActivityInfo;
import android.view.View;

import com.hjq.bar.OnTitleBarListener;
import com.hjq.bar.TitleBar;
import com.hjq.toast.ToastUtils;
import com.umeng.analytics.MobclickAgent;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
* author : HJQ
* github : https://github.com/getActivity/AndroidProject
* time : 2018/10/18
* desc : 项目中的Activity基类
*/
public abstract class CommonActivity extends UIActivity
implements OnTitleBarListener {

private Unbinder mButterKnife;//View注解

@Override
public void init() {

//初始化标题栏的监听
if (getTitleBarId() > 0) {
if (findViewById(getTitleBarId()) instanceof TitleBar) {
((TitleBar) findViewById(getTitleBarId())).setOnTitleBarListener(this);
}
}

mButterKnife = ButterKnife.bind(this);

initOrientation();

super.init();
}

/**
* 初始化横竖屏方向,会和 LauncherTheme 主题样式有冲突,注意不要同时使用
*/
protected void initOrientation() {
//如果没有指定屏幕方向,则默认为竖屏
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}

/**
* 设置标题栏的标题
*/
@Override
public void setTitle(int titleId) {
setTitle(getText(titleId));
}

/**
* 设置标题栏的标题
*/
@Override
public void setTitle(CharSequence title) {
super.setTitle(title);
TitleBar titleBar = getTitleBar();
if (titleBar != null) {
titleBar.setTitle(title);
}
}

protected TitleBar getTitleBar() {
if (getTitleBarId() > 0 && findViewById(getTitleBarId()) instanceof TitleBar) {
return findViewById(getTitleBarId());
}
return null;
}

@Override
public boolean statusBarDarkFont() {
//返回true表示黑色字体
return true;
}

/**
* {@link OnTitleBarListener}
*/

// 标题栏左边的View被点击了
@Override
public void onLeftClick(View v) {
onBackPressed();
}

// 标题栏中间的View被点击了
@Override
public void onTitleClick(View v) {}

// 标题栏右边的View被点击了
@Override
public void onRightClick(View v) {}

@Override
protected void onResume() {
super.onResume();
// 手动统计页面
MobclickAgent.onPageStart(getClass().getSimpleName());
// 友盟统计
MobclickAgent.onResume(this);
}

@Override
protected void onPause() {
super.onPause();
// 手动统计页面,必须保证 onPageEnd 在 onPause 之前调用,因为SDK会在 onPause 中保存onPageEnd统计到的页面数据
MobclickAgent.onPageEnd(getClass().getSimpleName());
// 友盟统计
MobclickAgent.onPause(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
if (mButterKnife != null) mButterKnife.unbind();
}

/**
* 显示一个吐司
*/
public void toast(CharSequence s) {
ToastUtils.show(s);
}
package com.hjq.demo.base;

import android.content.pm.ActivityInfo;
import android.view.View;

import com.hjq.bar.OnTitleBarListener;
import com.hjq.bar.TitleBar;
import com.hjq.toast.ToastUtils;
import com.hjq.umeng.UmengHelper;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
* author : HJQ
* github : https://github.com/getActivity/AndroidProject
* time : 2018/10/18
* desc : 项目中的Activity基类
*/
public abstract class MyActivity extends UIActivity
implements OnTitleBarListener {

private Unbinder mButterKnife;//View注解

@Override
public void init() {

//初始化标题栏的监听
if (getTitleBarId() > 0) {
if (findViewById(getTitleBarId()) instanceof TitleBar) {
((TitleBar) findViewById(getTitleBarId())).setOnTitleBarListener(this);
}
}

mButterKnife = ButterKnife.bind(this);

initOrientation();

super.init();
}

/**
* 初始化横竖屏方向,会和 LauncherTheme 主题样式有冲突,注意不要同时使用
*/
protected void initOrientation() {
//如果没有指定屏幕方向,则默认为竖屏
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}

/**
* 设置标题栏的标题
*/
@Override
public void setTitle(int titleId) {
setTitle(getText(titleId));
}

/**
* 设置标题栏的标题
*/
@Override
public void setTitle(CharSequence title) {
super.setTitle(title);
TitleBar titleBar = getTitleBar();
if (titleBar != null) {
titleBar.setTitle(title);
}
}

protected TitleBar getTitleBar() {
if (getTitleBarId() > 0 && findViewById(getTitleBarId()) instanceof TitleBar) {
return findViewById(getTitleBarId());
}
return null;
}

@Override
public boolean statusBarDarkFont() {
//返回true表示黑色字体
return true;
}

/**
* {@link OnTitleBarListener}
*/

// 标题栏左边的View被点击了
@Override
public void onLeftClick(View v) {
onBackPressed();
}

// 标题栏中间的View被点击了
@Override
public void onTitleClick(View v) {}

// 标题栏右边的View被点击了
@Override
public void onRightClick(View v) {}

@Override
protected void onResume() {
super.onResume();
// 友盟统计
UmengHelper.onResume(this);
}

@Override
protected void onPause() {
super.onPause();
// 友盟统计
UmengHelper.onPause(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
if (mButterKnife != null) mButterKnife.unbind();
}

/**
* 显示一个吐司
*/
public void toast(CharSequence s) {
ToastUtils.show(s);
}
}
Loading

0 comments on commit 5ec9b27

Please sign in to comment.