Eclipse转成Android Studio项目进行多渠道打包
来源:互联网 发布:java asm api 编辑:程序博客网 时间:2024/06/05 06:06
原生的打包还没研究 估计肯定比这个简单
首先 要在清单文件中 加入代码
<meta-data android:name="CHANNEL_ID" android:value="${CHANNEL_ID_VALUE}" />
然后 先从外层build.gradle进行改动
ext{}和task clean{}为新增代码:
Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0' }}ext { minSdkVersion = 8 targetSdkVersion = 19 compileSdkVersion = 19 buildToolsVersion = '23.0.3' sourceCompatibilityVersion = JavaVersion.VERSION_1_7 targetCompatibilityVersion = JavaVersion.VERSION_1_7}task clean(type: Delete) { delete rootProject.buildDir}
里面具体版本号根据自己需求来
然后更改大部分的是内层的build.gradle,也就是Model中build.gradle
apply plugin: 'com.android.application'dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':PushSDK')}buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0' }}android { compileSdkVersion 19 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.XX" //com.XX为包名 minSdkVersion rootProject.ext.minSdkVersion //刚才设置外层build.gradle就为了这用 targetSdkVersion rootProject.ext.targetSdkVersion //理由同上 versionCode 19 versionName "1.1.6" //版本名称和版本号 根据自己需求来 manifestPlaceholders = [ APPLICATION_NAME : "XX", //XX为项目名称 UMENG_APPKEY_VALUE : "友盟的APPKEY", //我的项目插入了友盟,可忽略 UMENG_CHANNEL_VALUE: "此处为友盟的渠道号", //友盟的渠道号 没引用友盟可忽略 CHANNEL_ID_VALUE: "xxxx_99999", //默认渠道号 此处和友盟无关 是你要生成的渠道号 不可忽略!!!! UMENG_MESSAGE_SECRET_VALUE: "**********" //友盟相关 可忽略 ] } signingConfigs { //签名文件相关 可自动生成 此处设置参考下面的图 myConfig { keyAlias '化名' keyPassword '密钥密码' storeFile file('密钥路径') storePassword '自动生成的密码' } } buildTypes { release {//打包的时候会运行这个模式 signingConfig signingConfigs.myConfig minifyEnabled false//是否开启混淆 一般不开启混淆,因为开启混淆各种审核不容易通过 最好等都打包好后通过360加固等工具进行加密 zipAlignEnabled true//是否支持zip文件的压缩 shrinkResources true//是否对无用资源进行删减// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 这行在开启混淆的时候用 不开启混淆就注释掉 } debug {//平时直接运行会走这个 signingConfig signingConfigs.myConfig minifyEnabled false zipAlignEnabled true shrinkResources true// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } productFlavors { //此处写想要的渠道号 xxxx_99999 // 360手机助手 xxxx_99998 // 应用宝 xxxx_99997 // 百度应用 } applicationVariants.all { variant -> //此处设置生成的apk路径和名称 variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def variantName = variant.name; //variantName = variantName.substring(0, variantName.lastIndexOf("_")) def fileName = "${variantName}_v${defaultConfig.versionName}_${releaseTime()}_${variant.buildType.name}.apk" output.outputFile = new File("F:\\XXXX\\XXXX\\XXXX\\XXXX", fileName) } } } productFlavors.all { flavor -> manifestPlaceholders = [CHANNEL_ID_VALUE: name ,UMENG_CHANNEL_VALUE: name] }}// 编译时间def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}tasks.withType(JavaCompile) { options.encoding = "UTF-8"}
上面关于签名的文件如下图设置后自动生成 打开Open Module Settings找到自己的Module →Signing
这样基本配置就完成了
最后要生成各渠道apk的时候选择gradle
这样双击会同时生成两个包,一个正常包一个debug包
可按下图设置 这样就只生成一个正常包
这样就基本完事了 我没取消debug就自动生成了俩
这样基本完事了 想要获取渠道ID的时候 可在 MyApplication里面增加个方法获取渠道ID
public String getChannelID(){String id = "99999"; //默认的渠道号try{ApplicationInfo info = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);id = String.format("%05d", info.metaData.getInt("CHANNEL_ID"));if (id == null || id.trim().length() == 0 || id.equals("00000")){id = "99999"; //默认渠道号}Log.e("RHID", "RHID_S_3: " + id);}catch (Exception e){e.printStackTrace();id = "99999"; //默认渠道号}return id;}通过获取MyApplication实例进行获取就完事儿了
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Android Studio 项目的gradle
外层与Eclipse一样 内层有所不同
apply plugin: 'com.android.application'android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.king2.myelephant" minSdkVersion rootProject.ext.minSdkVersion //刚才设置外层build.gradle就为了这用 targetSdkVersion rootProject.ext.targetSdkVersion //理由同上 versionCode 1 versionName "1.0" manifestPlaceholders = [ APPLICATION_NAME: "我的app", //XX为项目名称 CHANNEL_ID_VALUE: "我的app_99999", //默认渠道号 此处和友盟无关 是你要生成的渠道号 不可忽略!!!! ] } signingConfigs { myConfig { keyAlias 'com.myapp' keyPassword '12345678' storeFile file('D:/myappkey.jks') storePassword '123456789' } } buildTypes { release {//打包的时候会运行这个模式 signingConfig signingConfigs.myConfig minifyEnabled false // 是否开启混淆 zipAlignEnabled true // 是否支持zip文件的压缩 shrinkResources true // 是否对无用资源进行删减// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } debug {//平时直接运行会走这个 signingConfig signingConfigs.myConfig minifyEnabled false zipAlignEnabled true shrinkResources true// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } productFlavors { //安卓客户端渠道号// myapp_99999 // 官网// myapp_99998 // 应用宝// myapp_99997 // 百度应用 } applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def variantName = variant.name; //variantName = variantName.substring(0, variantName.lastIndexOf("_")) def fileName = "${variantName}_v${defaultConfig.versionName}_${releaseTime()}_${variant.buildType.name}.apk" output.outputFile = new File("E:\Myapp", fileName) } } } productFlavors.all { flavor -> manifestPlaceholders = [CHANNEL_ID_VALUE: name] }}buildscript { repositories { mavenCentral() }}dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.0' compile 'com.jakewharton:butterknife:7.0.1' compile 'org.xutils:xutils:3.3.32' compile 'com.android.support:design:23.3.0'}// 编译时间def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}tasks.withType(JavaCompile) { options.encoding = "UTF-8"}
主要需要注意的就是 signingConfig的配置 需要从ModelSetting里面进行设置 会自动生成 生成之后需要修改一下 把 buildType里面的config和自动生成的sign里面的config同名就好
基本就这样 还有就是依赖 dependencies 里面需要什么就写什么 我这个项目就是测试用的 所以引了很多没用的依赖 自行删除
Eclipse和Studio配置最主要的区别就是清单文件的位置不一样 所以gradle配置的时候不一样 Eclipse要多进行一步
由于可能引用了依赖 网络问题 有的时候可能导致打包失败 需要把gradle Setting里面的offline work设置一下
0 0
- Eclipse转成Android Studio项目进行多渠道打包
- Android Studio使用Gradle进行多渠道打包
- 使用android studio进行多渠道打包
- 使用Android Studio进行多渠道打包
- Android Studio如何进行多渠道打包
- Android studio 多渠道打包
- Android Studio多渠道打包
- Android studio 多渠道打包
- android studio 多渠道打包
- Android Studio 多渠道打包
- Android Studio 多渠道打包
- Android Studio多渠道打包
- Android Studio多渠道打包
- Android Studio 多渠道打包
- Android Studio 多渠道打包
- Android Studio多渠道打包
- Android studio 多渠道打包
- android studio 多渠道打包
- APUE------时间和日期
- MySQL与MongoDB的操作对比,以及区别
- JSP9大内置对象
- UIViewController的生命周期及iOS程序执行顺序
- JAVA 部分资料下载
- Eclipse转成Android Studio项目进行多渠道打包
- 通信协议之序列化TLV
- c++实验4-利用循环求和
- SpringMVC源码剖析(二)- DispatcherServlet的前世今生
- TestNG 学习总结 - 测试结果报告 - 自定义记录器(十六)
- Problem 1009
- java内存回收算法(分代收集)
- vim 批量注释
- 简单的滑动验证