Android同一套代码打多个APP包并能够在同一个手机上安装运行

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_28261207/article/details/82783283

Android同一套代码打多个APP包并能够在同一个手机上安装运行,同时APP名称、桌面icon图标也都不同

需要能够在同一个手机上运行:只有修改的包名不同,才能使同一套代码在同一个手机上运行。

给同一套代码起不同的多个包名,并把APP名称和桌面图标设置为根据每个APP判断显示哪个的

build.gradle

app下的build.gradle中:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.xxx.papplicationId1"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName '1.0.0'
        // -------------------------- 注意这里 ! ! ! --------------------------
        // 版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
        flavorDimensions "versionCode"
        // -----------------------------------------------------------------------
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
   }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    
    buildToolsVersion '27.0.3'
    
    // -------------------------- 注意这里 ! ! ! --------------------------
    productFlavors {
        // 通用app
        app1 {
            // 设置applicationId(这里很重要,两个相同applicationId的apk不同同时安装在同一台Android手机中)
            applicationId "com.xxx.applicationId1"
            // 自动生成@string/app_name为 app1的名称
            // 注意,这里是添加,在 string.xml 不能有这个字段,会重名!!!
            resValue "string", "app_name", "app111"
            // 定义app_icon等字段,在AndroidManifest.xml文件中用到
            manifestPlaceholders = [app_icon     : "@mipmap/ic_launcher",
                                    app_roundicon: "@mipmap/ic_launcher",
                                    // 因为每个APP包名不同,所以需要单独配置每个APP的第三方key
                                    // 修改 AndroidManifest.xml 里 地图appkey
                                    map_appkey   : "xxxxxxxxxxxxxx"]
        }
        // app2
        app2 {
            applicationId "com.xxx.applicationId2"
            resValue "string", "app_name", "app222"
            manifestPlaceholders = [app_icon     : "@mipmap/ic_launcher2",
                                    app_roundicon: "@mipmap/ic_launcher2",
                                    map_appkey   : "xxxxxxxxxxxxx"]
        }
    }
    // -----------------------------------------------------------------------

    // 移除lint检测的error
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }

    sourceSets.main {
        jniLibs.srcDirs = ['libs']
    }
}

dependencies {
	......
}

allprojects {
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

使用

AndroidManifest.xml

<application
    android:name=".xxxxx"
    android:allowBackup="true"
    android:icon="${app_icon}"
    android:label="@string/app_name"
    android:roundIcon="${app_roundicon}"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:replace="android:allowBackup">
    <!--tools:replace="icon,label,theme">-->

    <!-- 地图appkey, 使用build.gradle中动态的值 -->
    <meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="${map_appkey}"/>

完成

优化

第二种方法

  • 第一步 : build.gradle 中修改 - 同上方 ;
  • 第二步 : 在app -> src 中新建文件夹 , 文件夹名称同打包的名 , 例如 “app2” , 然后在 “app2” 下新建文件夹 “res” , 然后在 “res” 下创建文件夹 “mipmap-xxhdpi” ; 然后在这个文件夹下存放 app2 要用的启动图等 , 图片名称同 app1 即可 .
  • 完成 . 这种方法打包时不会打上其他包的东西 .

其他

# AndroidStudio中修改打包生成的apk名称 (点击跳页查看)

展开阅读全文

没有更多推荐了,返回首页