Android Studio 多渠道打包遇到的问题总结
16lz
2021-01-23
使用gradle构建android的默认project结构:
src/main----java/----res/----assets/----aidl/----rs/----jni/----AndroidManifest.xmlsrc/androidTest/----java/
问题一、因为sourceSets配置而导致的:specified for property 'manifest' does notexist.
官方的配置:
android{sourceSets{main{manifest.srcFile'AndroidManifest.xml'java.srcDirs=['src']resources.srcDirs=['src']aidl.srcDirs=['src']renderscript.srcDirs=['src']res.srcDirs=['res']assets.srcDirs=['assets']}}}
我的配置:
sourceSets{main{manifest.srcFile'src/main/AndroidManifest.xml'java.srcDirs=['src/main/java']/*resources.srcDirs=['src/main/res']aidl.srcDirs=['src']renderscript.srcDirs=['src']*/res.srcDirs=['src/main/res']assets.srcDirs=['src/main/assets']}}
问题二、当你main版本和GooglePlay版本的Manifest配置一样时,出现:
declaredatAndroidManifest.xml:157:5Error:(3,5)Attributemanifest@versionCodevalue=(12)fromAndroidManifest.xml:3:5Error:(4,5)Attributemanifest@versionNamevalue=(2.1)fromAndroidManifest.xml:4:5isalsopresentatAndroidManifest.xml:4:5value=(2.0-debug)Suggestion:add'tools:replace="android:versionName"'to<manifest>elementatAndroidManifest.xml:1:1tooverride:app:processGooglePlayDebugManifestFAILEDError:Executionfailedfortask':app:processGooglePlayDebugManifest'.>Manifestmergerfailedwithmultipleerrors,seelogs
解决:
1.Suggestion: add 'tools:replace="android:versionName"' to <manifest> element at AndroidManife 这句话就是叫你在AndroidManifest.xml里面加这个东西,
2.网上还有种方法在build.gradle根标签上加上useOldManifestMerger true, 我试了下不行。所以只能老老实有第一种。
<manifestxmlns:tools="http://schemas.android.com/tools"xmlns:android="http://schemas.android.com/apk/res/android"tools:replace="android:versionName,android:versionCode"
最后上一个我自己的最终版的配置信息:
applyplugin:'com.android.application'android{compileSdkVersion21buildToolsVersion"21.1.1"defaultConfig{applicationId"com.deetech"minSdkVersion8targetSdkVersion21versionCode2versionName"2.0"//AndroidManifest.xml里面UMENG_CHANNEL的value为${UMENG_CHANNEL_VALUE}//manifestPlaceholders=[UMENG_CHANNEL_VALUE:"channel_name"]}packagingOptions{exclude'META-INF/NOTICE'exclude'META-INF/LICENSE'exclude'META-INF/DEPENDENCIES'}/*buildTypes{release{minifyEnabledfalseproguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.txt'}}*///执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。lintOptions{abortOnErrorfalse}//签名signingConfigs{debug{storeFilefile("C:/Users/Administrator/.android/debug.keystore")}relealse{storeFilefile("F:/gradle.jks")//AndroidStudio-->Build-->GenerateSignedAPK-->CreateNew可以生成storePassword"gradle"//在生成.jks文件时需要填入的参数一一对应即可keyAlias"gradle"keyPassword"gradle"}}buildTypes{debug{//显示LogbuildConfigField"boolean","LOG_DEBUG","true"versionNameSuffix"-debug"minifyEnabledfalsezipAlignEnabledfalseshrinkResourcesfalsesigningConfigsigningConfigs.debug}release{//不显示LogbuildConfigField"boolean","LOG_DEBUG","false"//混淆minifyEnabledtrue//Zipalign优化zipAlignEnabledtrue//移除无用的resource文件shrinkResourcestrue//加载默认混淆配置文件progudard-android.txt在sdk目录里面,不用管,proguard.cfg是我们自己配<span></span>的混淆文件proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard.cfg'//签名signingConfigsigningConfigs.relealse}}sourceSets{main{manifest.srcFile'src/main/AndroidManifest.xml'java.srcDirs=['src/main/java']/*resources.srcDirs=['src/main/res']aidl.srcDirs=['src']renderscript.srcDirs=['src']*/res.srcDirs=['src/main/res']assets.srcDirs=['src/main/assets']}//Movetheteststotests/java,tests/res,etc...instrumentTest.setRoot('tests')//Movethebuildtypestobuild-types/<type>//Forinstance,build-types/debug/java,build-types/debug/AndroidManifest.xml,...//Thismovesthemoutofthemdefaultlocationundersrc/<type>/...whichwould//conflictwithsrc/beingusedbythemainsourceset.//Addingnewbuildtypesorproductflavorsshouldbeaccompanied//byasimilarcustomization.debug.setRoot('build-types/debug')release.setRoot('build-types/release')GooglePlay{//设置GooglePlay渠道的配置文件位置manifest.srcFile'src/main/googlePlay/AndroidManifest.xml'}/*xiaomi{manifest.srcFile'AndroidManifest.xml'}umeng{manifest.srcFile'AndroidManifest.xml'}*/}//渠道Flavors,我这里写了一些常用的productFlavors{GooglePlay{//packageName="com.deetech"//这里可以配置不同的包名}xiaomi{//packageName="com.deetech"}umeng{//packageName="com.deetech"}}compileOptions{sourceCompatibilityJavaVersion.VERSION_1_7targetCompatibilityJavaVersion.VERSION_1_7}/*productFlavors.all{flavor->flavor.manifestPlaceholders=[UMENG_CHANNEL_VALUE:name]}*///在生成的apk文件,修改下命名而已applicationVariants.all{variant->variant.outputs.each{output->defoutputFile=output.outputFileif(outputFile!=null&&outputFile.name.endsWith('.apk')){deffileName=outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")output.outputFile=newFile(outputFile.parent,fileName)}}}}dependencies{//compile'com.android.support:support-v4:20.0.0'compilefileTree(dir:'libs',include:['*.jar'])compile'com.google.code.gson:gson:2.2.4'}
更多相关文章
- Android 下载网络url文件并显示进度
- 【Android】向sdcard中写入文件
- Android 解析CSV文件,中文乱码
- android 打开各种文件的方式
- iOS、Android获取文件头信息
- Android通过Uri获取文件的路径的方法
- 【Android】使用Git控制Android程序的gitignore文件
- Android ListActivity实现遍历文件列表,查看文档类文件
- Android 后台保活设计2019,最新版本