Android Studio 打包多个APK对应不同API
来源:互联网 发布:云烟 淘宝客 编辑:程序博客网 时间:2024/05/16 16:12
应用场景:经常发版本经常徘徊于测试API和正式API之间,一不小心太着急打包了,忘记改为正式API,又得重新打包。
问题:能不能一次操作,产出多个APK对应不同API。
重点:一切都在model的build.gradle
方法一
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } dev{ applicationIdSuffix ".dev" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug{ applicationIdSuffix ".debug" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors{ //自定义名字 但是不能和上面buildType中相同,不然Gradle编译会不通过。在这里使用了『flavors_』前缀以便区分。 flavors_release{ // manifestPlaceholders中写到的『str』,『package_name』不支持用大写,否则Gradle编译会不通过。 // 这里所设置的变量可以直接使用在『AndroidManifest.xml』中,使用方式为:${package_name} // android:label="${package_name}" manifestPlaceholders = [str:"releaseStr",app_name:"appname.release"] // 这里的参数是为了在 java 代码中使用,具体的使用方式为:context.getResources().getString(R.string.strKey); resValue("string" , "host","http://www.sun.com") } flavors_dev{ manifestPlaceholders = [str:"devStr",app_name:"appname.dev"] resValue("string" ,"host","http://www.google.com") } flavors_debug{ manifestPlaceholders = [str:"devStr",app_name:"appname.debug"] resValue("string" , "host","http://www.baidu.com") } }
划重点
applicationIdSuffix 看起来不一样,仅仅为了区分版本,applicationId还是一样 ,以上有三个版本其实就只能装一个在同一个手机上。
manifestPlaceholders 类似一个Map,不同版本下对应不同的值如上面想改变不同版本的app的名字,那么代码如下
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fredro.shiji.myapplication"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="${app_name}" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
manifest中的重点在于android:label=”${app_name}”不同版本对应的app名字就会是appname.release;appname.dev;appname.debug。如果要其它类似的结果也可以用manifestPlaceholders考虑考虑。
不同版本有了,对应的API是怎么处理?
resValue("string" , "host","http://www.sun.com")resValue("string" , "host","http://www.baidu.com")resValue("string" ,"host","http://www.google.com")
不同版本对应的resValue中的value就是对应的API,resValue取值类似于context.getResources().getString(R.string.strKey);
import static com.fredro.shiji.myapplication.R.string.host;public class MainActivity extends AppCompatActivity { private TextView tv; private static String HOST; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv);// tv.setText(host);// Contast.HOST = tv.getText().toString(); HOST = getString(host);// tv.setText(host + "\n" + "HOST:" + Contast.HOST); tv.setText(HOST); }}
写完resValue(“string” , “host”,”http://www.sun.com“)后
再同步编译才会有“host”这个字段,才能引入
import static com.fredro.shiji.myapplication.R.string.host;
将资源String id转换成字符串方法:
String a=context.getString(resId);
方法二
创建不同版本的文件夹,然后包名一样,类名也一样,主要API接口不一样。还是build.gradle修改
productFlavors { product { applicationId 'product.com.joe.differentrequest' versionName '1.0-product' } uat { applicationId 'uat.com.joe.differentrequest' versionName '1.0-uat' } nduat { applicationId 'uduat.com.joe.differentrequest' versionName '1.0-uduat' } }
此方法打包出来的三个apk可以同时安装在一个手机中。因为applicationId不一样。
参考:
http://blog.csdn.net/xx326664162/article/details/48467343
http://www.jianshu.com/p/81eff804d1b8
- Android Studio 打包多个APK对应不同API
- Android Studio 一个工程打包多个不同包名的APK
- android studio 打包apk
- android studio打包APK
- Android Studio 打包APK
- Android Studio 打包APK
- Android Studio 打包APK
- android studio打包apk
- android studio打包apk
- Android studio打包APK
- Android Studio APK打包
- Android Studio打包apk
- Android Studio 友盟api实现apk多渠道打包
- Android studio 多版本apk 打包
- Android Studio(十二):打包多个发布渠道的apk文件
- Android Studio apk 打包流程
- Android Studio apk 打包流程
- Android Studio打包生成APK
- Windows10 64位 安装python xgboost 工具包
- 网狐6603棋牌源码+送50多款游戏源码+送全套安
- DataTable Select
- 视区相关单位vw, vh..简介以及可实际应用场景
- SQL Server 触发器
- Android Studio 打包多个APK对应不同API
- Python下修改pip安装源
- IntelliJ IDEA 使用
- Liunx 开机自启管理
- ubuntu16.04 +tensorflow1.4安装 + 运行问题解决
- jvm一问一答
- java
- CSS学习
- php curl_multi批量发送http请求