多渠道共存打包(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23195583/article/details/53782174

我的工程源代码请点击这里

这次不多说了,给大家上一下代码,是用mvp写的,这里再说一下资源对应的问题,如果和main同级的z开头的包中没有的话gradle会默认从和main中进行资源的查找,这里我上代码就把main中的上一下,代码已经托管到github上了
baseview:

package com.fanyafeng.codetopackage;

/**
 * Author: fanyafeng
 * Data: 16/12/20 下午6:05
 * Email: fanyafeng@live.cn
 */
public interface BaseView<T> {
    void setPresenter(T presenter);
}

basepresenter:

package com.fanyafeng.codetopackage;

/**
 * Author: fanyafeng
 * Data: 16/12/20 下午6:05
 * Email: [email protected]
 */
public interface BasePresenter {
    void start();
}

baseactivity:

package com.fanyafeng.codetopackage;

import android.os.Bundle;
import android.widget.TextView;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class BaseActivity extends AppCompatActivity implements View.OnClickListener {

    protected Toolbar toolbar;
    protected TextView toolbar_center_title;
    protected boolean isShowToolbar = true;
    protected boolean isSetNavigationIcon = true;
    protected boolean isSetLogo = false;
    protected boolean isShowEmail = true;
    protected String title;
    protected String centertitle;
    protected String subtitle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onClick(View v) {

    }

    @Override
    protected void onResume() {
        super.onResume();
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar_center_title = (TextView) findViewById(R.id.toolbar_center_title);
        if (toolbar != null) {
            if (isShowToolbar) {
                setSupportActionBar(toolbar);
            } else {
                toolbar.setVisibility(View.GONE);
            }

            if (title != null && !title.equals("")) {
                toolbar.setTitle(title);
            } else {
                toolbar.setTitle("");
            }

            if (subtitle != null && !subtitle.equals("")) {
                toolbar.setSubtitle(subtitle);
            }
            if (isSetNavigationIcon) {
//                由于要兼容低版本,所以采用这个划杠的方法,需要自己根据需求替换图片
                toolbar.setNavigationIcon(getResources().getDrawable(R.mipmap.ic_menu_back));
                toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        finish();
                    }
                });
            }
            if (isSetLogo) {
                //需要自己根据需求进行替换图片
                toolbar.setLogo(getResources().getDrawable(R.mipmap.ic_launcher));
            }

            if (toolbar_center_title != null) {
                if (centertitle != null && !centertitle.equals("")) {
                    toolbar_center_title.setText(centertitle);
                } else {
                    toolbar_center_title.setText("");
                }

            }

        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_base, menu);
        //        默认隐藏setting按钮
        if (toolbar != null) {
            MenuItem menuItem = toolbar.getMenu().getItem(0);
            if (menuItem != null) {
                menuItem.setVisible(false);
            }
        }
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        switch (id) {
            case R.id.action_settings:
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}

注释不多,但是比较容易理解
maincontract

package com.fanyafeng.codetopackage.main;

import com.fanyafeng.codetopackage.BasePresenter;

/**
 * Author: fanyafeng
 * Data: 16/12/20 下午6:06
 * Email: [email protected]
 */
public interface MainContract {
    interface View {
        void setMyPackageName(String packageName);

        void setMyPackageInfo(String packageInfo);

        void setName(String name);

        void setGitHub(String gitHub);

        void setCSDN(String csdn);
    }

    interface Presenter extends BasePresenter {
        void setMyPackageName();

        void setMyPackageInfo();

        void setName();
    }
}

mainpresenter:

package com.fanyafeng.codetopackage.main;

import android.content.Context;

import com.fanyafeng.codetopackage.R;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * Author: fanyafeng
 * Data: 16/12/20 下午6:07
 * Email: [email protected]
 */
public class MainPresenter implements MainContract.Presenter {
    private String myPackage;
    private String myName;
    private String myGitHub;
    private String myCSDN;

    private Context context;
    private MainContract.View view;

    public MainPresenter(Context context, MainContract.View view) {
        this.context = context;
        this.view = view;
    }

    @Override
    public void start() {
        try {
            Properties properties = new Properties();
            InputStream inputStream = context.getAssets().open("config.properties");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            properties.load(bufferedReader);
            myPackage = properties.getProperty("mypackage");
            myName = properties.getProperty("myname");
            myGitHub = properties.getProperty("mygithub");
            myCSDN = properties.getProperty("mycsdn");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void setMyPackageName() {
        view.setMyPackageName(myPackage);
    }

    @Override
    public void setMyPackageInfo() {
        view.setMyPackageInfo(myName);
    }

    @Override
    public void setName() {
        view.setName(context.getString(R.string.app_name));
        view.setGitHub(myGitHub);
        view.setCSDN(myCSDN);
    }


}

对配置文件的操作在p里面,不了解的可以百度一下
mainactivity:

package com.fanyafeng.codetopackage.main;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.fanyafeng.codetopackage.R;
import com.fanyafeng.codetopackage.BaseActivity;

//需要搭配Baseactivity,这里默认为Baseactivity,并且默认BaseActivity为包名的根目录
public class MainActivity extends BaseActivity implements MainContract.View {
    private MainContract.Presenter presenter;

    private Button btnMyPackageName;
    private TextView tvMyPackageName;
    private Button btnMyPackageInfo;
    private TextView tvMyPackageInfo;
    private Button btnGetName;
    private TextView tvGetName;
    private TextView tvGetName1;
    private TextView tvGetName2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //这里默认使用的是toolbar的左上角标题,如果需要使用的标题为中心的采用下方注释的代码,将此注释掉即可
        title = getString(R.string.title_activity_main);
        isSetNavigationIcon = false;
        presenter = new MainPresenter(this, this);
        initView();
        presenter.start();
        initData();
    }

    //初始化UI控件
    private void initView() {
        btnMyPackageName = (Button) findViewById(R.id.btnMyPackageName);
        btnMyPackageName.setOnClickListener(this);
        tvMyPackageName = (TextView) findViewById(R.id.tvMyPackageName);
        btnMyPackageInfo = (Button) findViewById(R.id.btnMyPackageInfo);
        btnMyPackageInfo.setOnClickListener(this);
        tvMyPackageInfo = (TextView) findViewById(R.id.tvMyPackageInfo);
        btnGetName = (Button) findViewById(R.id.btnGetName);
        btnGetName.setOnClickListener(this);
        tvGetName = (TextView) findViewById(R.id.tvGetName);
        tvGetName1 = (TextView) findViewById(R.id.tvGetName1);
        tvGetName2 = (TextView) findViewById(R.id.tvGetName2);
    }

    //初始化数据
    private void initData() {

    }

    @Override
    public void setMyPackageName(String packageName) {
        tvMyPackageName.setText(packageName);
    }

    @Override
    public void setMyPackageInfo(String packageInfo) {
        tvMyPackageInfo.setText(packageInfo);
    }

    @Override
    public void setName(String name) {
        tvGetName.setText(name);
    }

    @Override
    public void setGitHub(String gitHub) {
        tvGetName1.setText(gitHub);
    }

    @Override
    public void setCSDN(String csdn) {
        tvGetName2.setText(csdn);
    }

    @Override
    public void onClick(View v) {
        super.onClick(v);
        switch (v.getId()) {
            case R.id.btnMyPackageName:
                presenter.setMyPackageName();
                break;
            case R.id.btnMyPackageInfo:
                presenter.setMyPackageInfo();
                break;
            case R.id.btnGetName:
                presenter.setName();
                break;
        }
    }
}

配置文件:config.properties

mypackage=365rili
myname=fanyafeng
mygithub=https://github.com/1181631922
mycsdn=http://blog.csdn.net/qq_23195583

这里类似键值对,回车换行,支持中文,但是需要注意乱码问题
gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.fanyafeng.codetopackage"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        z20111308011 {
            applicationId "com.fanyafeng.codetopackage.z20111308011"
            manifestPlaceholders = [APP_NAME: "求福"]
        }
        z20111308016 {
            applicationId "com.fanyafeng.codetopackage.z20111308016"
            manifestPlaceholders = [APP_NAME: "红酒"]
        }
        z20111308069 {
            applicationId "com.fanyafeng.codetopackage.z20111308069"
            manifestPlaceholders = [APP_NAME: "测试"]
        }
    }


}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:design:25.1.0'
    testCompile 'junit:junit:4.12'
}

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.fanyafeng.codetopackage">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${APP_NAME}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".main.MainActivity"
            android:label="${APP_NAME}"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

猜你喜欢

转载自blog.csdn.net/qq_23195583/article/details/53782174
今日推荐