多渠道替換Laucher Activity的方法

在渠道打包中,常常有這種需要不同渠道使用不同的啟動Activity的需求
這里有兩種方案,其中第二種是工作中使用的最佳方案

第一種方案

先說明下出現(xiàn)的問題,如果在flavor中再建一個(gè)目錄,配置Manifest.xml,設(shè)置為下面的話

 <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

測試發(fā)現(xiàn),安裝一個(gè)app會出現(xiàn)兩個(gè)啟動Activity在桌面(用戶也是一下安裝兩個(gè)不同App哎)

但是我們只需要一個(gè),且合并時(shí)候是根據(jù)Activity的name合并的,flavor和main定義同包同類 工具會報(bào)錯(cuò),定義不同類合并后又出現(xiàn)了兩個(gè),而我試過 tools:replace又是各種不行,最后只能想到用此方法,雖然name里面配置占位符 工具顯示紅叉,但是不影響運(yùn)行。

 <activity
            android:name="${XX}"
            android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"


    signingConfigs {
        debug {
            storeFile file("../syntc-debug.jks")
            storePassword 'syntcstudio'
            keyAlias 'ruulaitv'
            keyPassword 'ruulaitv'
        }
        release {
            storeFile file("../syntc-debug.jks")
            storePassword 'syntcstudio'
            keyAlias 'ruulaitv'
            keyPassword 'ruulaitv'
        }
    }




    defaultConfig {
        applicationId "com.example.ruulai.test"
        minSdkVersion 11
        targetSdkVersion 18
        versionCode 1
        versionName "1.0"

        manifestPlaceholders = [
                UMENG_CHANNEL_VALUE: "abcd",
                XX                   : "com.example.ruulai.test.MainActivity"
        ]


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

        debug {
            signingConfig signingConfigs.debug
        }


    }

//    lintOptions {
//        checkReleaseBuilds false
//        // Or, if you prefer, you can continue to check for errors in release builds,
//        // but continue the build even when errors are found:
//        abortOnError false
//    }

//    productFlavors {
//
//        wandoujia {}
//        baidu {}
//        c360 {}
//        uc {}
//
//        productFlavors.all { flavor ->
//            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
//        }
//
//    }
    productFlavors {

        wandoujia {
            applicationIdSuffix ".wandoujia"
            manifestPlaceholders = [
                    UMENG_CHANNEL_VALUE: "wandoujia",
                    XX                 : "com.example.ruulai.test.MainActivity"
            ]
        }

        baidu {
            applicationIdSuffix ".baidu"
            manifestPlaceholders = [
                    UMENG_CHANNEL_VALUE: "baidu",
                    XX                 : "com.ext.ruu.BaiduActivity"
            ]
        }

        uc {
            applicationIdSuffix ".uc"
            manifestPlaceholders = [
                    UMENG_CHANNEL_VALUE: "uc",
                    XX                 : "com.ext.ruu.BaiduActivity"
            ]


        }

    }


}



dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.packetzoom:pz-okhttp3-interceptor:3.2.7'
}

第二種方案(給個(gè)贊哦)


<activity
android:name=".activity.MainActivity"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
tools:node="merge">
<intent-filter tools:node="remove">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>

然后使用新的Activity作為 啟動Activity(類名隨意)

    <activity android:name=".NewActicity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

是不是簡單的粗暴

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,936評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 最近在項(xiàng)目中遇到需要實(shí)現(xiàn) Apk 多渠道、定制化打包, Google 、百度查找了一些資料,成功實(shí)現(xiàn)了上述功能,在...
    看一季殘花落幕閱讀 2,645評論 1 8
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,262評論 6 342
  • 目前iOS開發(fā)無論是哪種設(shè)計(jì)模式基本上和Model都脫不開關(guān)系,那么怎么快速的寫出一個(gè)Model呢。下面有幾種方法...
    queuey閱讀 2,368評論 0 3

友情鏈接更多精彩內(nèi)容