Android Studio第二十八期 - 一次性打多版本APK

    这是过年最后一篇博文了,正好也忙完了,好好写写~这一年我经历了很多,也成长不少,不论是技术还是财富,还是感情,自己都看开了许多,生活如阳光般shining~一起加油~

    wKiom1ht8ObhZqZRAACkZiehMNc528.jpg

    如果你的APP版本比较多,但是功能类似,这时候用的是一套代码,打版就是一件费事的事情了,跑一次要好久,所以就出现了一次性多版本打版的方法。

    如图:

    wKiom1ht8WrhRPhlAAAW6zBmKVw265.png

    1.先把公共变量配置一下,调用的时候去调分版的设置,分版的设置公共变量在主流程的代码中~

    代码1:  

package com.example.p010_recycleviewall.application;

/**
 * Created by shining on 2017/1/4 0004.
 */

public class ConstantNetUtil {
    //
    public static final boolean SERVER_CHANGE_B = VersionConfig.SET_VIS_B;
    public static final boolean SERVER_CHANGE_B1 = VersionConfig.SET_VIS_B1;
    public static final boolean SERVER_CHANGE_B2 = VersionConfig.SET_VIS_B2;
    public static final boolean SERVER_CHANGE_B3 = VersionConfig.SET_VIS_B3;
    public static final boolean SERVER_CHANGE_B4 = VersionConfig.SET_VIS_B4;
    public static final boolean SERVER_CHANGE_B5 = VersionConfig.SET_VIS_B5;
    public static final boolean SERVER_CHANGE_B6 = VersionConfig.SET_VIS_B6;

}

    代码2:

package com.example.p010_recycleviewall.application;

/**
 * Created by shining on 2017/1/4 0004.
 */

public class VersionConfig {

    public static final boolean SET_VIS_B = NetConfig.B_TRUE;
    public static final boolean SET_VIS_B1 = NetConfig.B_FALSE;
    public static final boolean SET_VIS_B2 = NetConfig.B_FALSE;
    public static final boolean SET_VIS_B3 = NetConfig.B_FALSE;
    public static final boolean SET_VIS_B4 = NetConfig.B_FALSE;
    public static final boolean SET_VIS_B5 = NetConfig.B_FALSE;
    public static final boolean SET_VIS_B6 = NetConfig.B_FALSE;

}

    代码3:

package com.example.p010_recycleviewall.application;

/**
 * Created by shining on 2017/1/4 0004.
 */

public class NetConfig {
    //
    public static final boolean B_TRUE = true;
    public static final boolean B_FALSE = false;

}

    2.然后新建各种分版配置包:其实是先新建~O(∩_∩)O哈哈~

    wKioL1ht8qmgdCyfAAAqgnkIP1s694.png


    3.如果你的配置里面有resource配置,那就如上图配置xml就可以~

    4.接着就是gradle的配置:

    def int minSdk = 15;
    def int targetSdk = 23;
    def String appId = 'com.example.p010_recycleviewall';

    def int vCode = 1;
    def String vNameCode = vCode + "";



    productFlavors {
        //demo
        DemoAPK {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        //demo1
        DemoAPK1 {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK1"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        //demo2
        DemoAPK2 {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK2"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        //demo3
        DemoAPK3 {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK3"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        //demo4
        DemoAPK4 {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK4"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        //demo5
        DemoAPK5 {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK5"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        //demo6
        DemoAPK6 {
            minSdkVersion minSdk
            applicationId appId
            targetSdkVersion targetSdk
            versionCode vCode
            versionName "DemoAPK6"
            multiDexEnabled true

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    }

    // 自定义输出配置
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
//                def fileName = "UerbT_v${variant.versionName}_${releaseTime()}_${variant.flavorName}.apk"
                def fileName = "${variant.versionName}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }

    5.最后就是demo的一次打七个版本,每个版本分别多显示一个TextView~

package com.example.p010_recycleviewall;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.example.p010_recycleviewall.application.ConstantNetUtil;
import com.example.p010_recycleviewall.recycleviewgridview.MainActivity2;
import com.example.p010_recycleviewall.recycleviewgridviewaddheadandfooter.MainActivity4;
import com.example.p010_recycleviewall.recycleviewlistview.MainActivity1;
import com.example.p010_recycleviewall.recycleviewlistviewaddheadandfooter.MainActivity3;
import com.example.p010_recycleviewall.tablayout.fragmentframelayout.ShopIndexActivity;
import com.example.p010_recycleviewall.tablayout.fragmentviewpager.MainActivityTabLayout;

public class MainActivity extends AppCompatActivity {


    private static final String APP_ID = "App_id";
    private AlipayClient alipayClient;
    private static final String APP_PRIVATE_KEY = "密钥";
    private static final String APP_PUBLIC_KEY = "支付宝公钥";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        set_vis(ConstantNetUtil.SERVER_CHANGE_B, ConstantNetUtil.SERVER_CHANGE_B1, ConstantNetUtil.SERVER_CHANGE_B2,
                ConstantNetUtil.SERVER_CHANGE_B3, ConstantNetUtil.SERVER_CHANGE_B4, ConstantNetUtil.SERVER_CHANGE_B5,
                ConstantNetUtil.SERVER_CHANGE_B6);
        findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity1.class);
                startActivity(intent);
            }
        });
        findViewById(R.id.tv2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                startActivity(intent);
            }
        });
        findViewById(R.id.tv3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity3.class);
                startActivity(intent);
            }
        });
        findViewById(R.id.tv4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity4.class);
                startActivity(intent);
            }
        });
        findViewById(R.id.tv5).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivityTabLayout.class);
                startActivity(intent);
            }
        });
        findViewById(R.id.tv6).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ShopIndexActivity.class);
                startActivity(intent);
            }
        });

        //支付宝扫码支付bufen
        alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", "GBK", APP_PUBLIC_KEY);
        findViewById(R.id.tv7).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类
                request.setBizContent("{" +
                        "    \"out_trade_no\":\"20150320010101002\"," +
                        "    \"total_amount\":88.88," +
                        "    \"subject\":\"Iphone6 16G\"," +
                        "    \"store_id\":\"NJ_001\"," +
                        "    \"timeout_express\":\"90m\"," +
                        "  }");//设置业务参数
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            AlipayTradePrecreateResponse response = alipayClient.execute(request);
                            System.out.println("结果=" + response.getQrCode());

                        } catch (AlipayApiException e) {
                            System.out.println("进入异常");
                            Log.e("1", "Exception: " + Log.getStackTraceString(e));
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
    }


    /**
     * @param b
     * @param b1
     * @param b2
     * @param b3
     * @param b4
     * @param b5
     * @param b6
     */
    private void set_vis(boolean b, boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6) {
        if (b) {
            findViewById(R.id.tv1).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv1).setVisibility(View.GONE);
        }
        if (b1) {
            findViewById(R.id.tv2).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv2).setVisibility(View.GONE);
        }
        if (b2) {
            findViewById(R.id.tv3).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv3).setVisibility(View.GONE);
        }
        if (b3) {
            findViewById(R.id.tv4).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv4).setVisibility(View.GONE);
        }
        if (b4) {
            findViewById(R.id.tv5).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv5).setVisibility(View.GONE);
        }
        if (b5) {
            findViewById(R.id.tv6).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv6).setVisibility(View.GONE);
        }
        if (b6) {
            findViewById(R.id.tv7).setVisibility(View.VISIBLE);
        } else {
            findViewById(R.id.tv7).setVisibility(View.GONE);
        }
    }

}

    6.找到gradle.bat路径下执行gradlew assembleDebug~Waitting~

    wKiom1ht9NexzVGzAAAS6Hr8mmg193.png

    wKioL1ht9PeQBULhAAB7zT7H9TI604.png

    wKiom1ht9SuDgUvnAAAVBi0Rg7M127.png

    7.是不是很帅~最后讲一下版本running的切换,选择哪个就会切换到哪个版本~看图:

    wKioL1ht9XSRXR6pAAA08Mu_wmM538.png

    wKioL1ht9ZbxYJRHAAA6sUtQwVQ124.png


    这一年忙的很苦,但是也很幸福,有追求的目标和方向~生活还是充满正能量~希望2017年能实现自己的梦想和感受幸福~新年快乐~

   Shining(*^__^*) 嘻嘻……

    wKiom1ht-ITQWWI9AAFmAsH4qfw409.png

    git地址:https://github.com/geeklx/MyApplication/tree/master/p010_recycleviewall

    wKioL1ht-ITAHHrBAAAutn4_bHA419.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值