这是过年最后一篇博文了,正好也忙完了,好好写写~这一年我经历了很多,也成长不少,不论是技术还是财富,还是感情,自己都看开了许多,生活如阳光般shining~一起加油~
如果你的APP版本比较多,但是功能类似,这时候用的是一套代码,打版就是一件费事的事情了,跑一次要好久,所以就出现了一次性多版本打版的方法。
如图:
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哈哈~
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~
7.是不是很帅~最后讲一下版本running的切换,选择哪个就会切换到哪个版本~看图:
这一年忙的很苦,但是也很幸福,有追求的目标和方向~生活还是充满正能量~希望2017年能实现自己的梦想和感受幸福~新年快乐~
Shining(*^__^*) 嘻嘻……
git地址:https://github.com/geeklx/MyApplication/tree/master/p010_recycleviewall
本文出自 “梁肖技术中心” 博客,请务必保留此出处http://liangxiao.blog.51cto.com/3626612/1889342
Android Studio第二十八期 - 一次性打多版本APK
原文:http://liangxiao.blog.51cto.com/3626612/1889342