1. 程式人生 > >Android同一套程式碼打多個APP包並能夠在同一個手機上安裝執行

Android同一套程式碼打多個APP包並能夠在同一個手機上安裝執行

Android同一套程式碼打多個APP包並能夠在同一個手機上安裝執行

Android同一套程式碼打多個APP包並能夠在同一個手機上安裝執行,同時APP名稱、桌面icon圖示也都不同

需要能夠在同一個手機上執行:只有修改的包名不同,才能使同一套程式碼在同一個手機上執行。

給同一套程式碼起不同的多個包名,並把APP名稱和桌面圖示設定為根據每個APP判斷顯示哪個的

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}"/>

完成

其他

# AndroidStudio中修改打包生成的apk名稱 (點選跳頁檢視)