Android Studio同一工程生成不同的app名,包名,图标分别设置,路径和文件名

博客主要围绕Android Studio开发展开,介绍了修改app的build.gradle文件时遇到的错误及解决办法,强调所有flavor需属于同一维度。还提及修改AndroidManifest.xml文件可生成两个apk,以及在Gradle3.3以上版本修改生成名字和路径的方法。

修改app的build.gradle文件

android {
    ...
    productFlavors {

        app1 {
            applicationId "com.johan.demo"
            // 生成@string/app_name为demo 要把@string/app_name清掉
            resValue "string","app_name","demo"
            // 定义app_icon字段,在AndroidManifest.xml文件中用到 
            manifestPlaceholders = [app_icon : "@mipmap/ic_launcher"]
        }

        app2 {
            applicationId "com.johan.demo1"
            resValue "string","app_name","demo1"
            manifestPlaceholders = [app_icon : "@mipmap/ic_launcher1"]
        }
    }
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

出现Error:All flavors must now belong to a named flavor dimension. Learn more at
必须要所有的flavor 都属于同一个维度

defaultConfig {
	 targetSdkVersion:***
	minSdkVersion :***
	versionCode:***
	 versionName :***
	//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
	flavorDimensions "versionCode"
}

修改AndroidManifest.xml文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.johan.demo">

    <application
        android:allowBackup="true"
        // 这里改为${app_icon}
        android:icon="${app_icon}"
        android:label="@string/app_name" //这里变红了,不用管他
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ui.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这样就会生成两个apk分别在文件夹app1和app2中
修改生成的名字和路径
Gradle3.3 以上的方法 修改app的build.gradle文件
加入:

android {
    ...
	applicationVariants.all { variant ->
	 if (variant.buildType.name != "debug") {
	     variant.getPackageApplicationProvider().get().outputDirectory = new File(project.rootDir.absolutePath + "/apk")
	 }
	 variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData ->
	     apkData.outputFileName = ((project.name != "app") ? project.name : rootProject.name) + "-" +
	             variant.versionName + "_" +
	             variant.flavorName + "_" +
	             variant.buildType.name + "_" +
	             ".apk"
	 }
	}
}

这个是全局的,所有生成的都会被设置到同一个文件夹,以文件名 variant.flavorName 区别.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值