在开发过程中,会遇到这种业务。 在某一个渠道,需要引入一些三方sdk,需要写一些差异性代码,跟原来的业务有重叠。如果所有的判断逻辑都写在一起,会出现很多if(flavor==xxx),并且三方sdk的包也会都在app里产生增量,直接导致apk过大。
话不多说,直接上解决方案:
1、src文件下面分渠道来写代码 2、build.gradle下使用 flavorImplemention 来引入渠道对应的三方库文件
案例:在当贝渠道添加当贝sdk广告库
***’dangbeilibs‘***可以单独用于存放dangbeiSDK的库文件
DangbeiApp继承App
DangbeiMainActivity继承MainActivity
注意:红色框里面的代码。如果入口activity的category是launcher,那么多个activity就会出现多个桌面应用图标,这里这样写可以只有一个图标 具体的缘由可搜索:“Android清单文件替换优先级相关”
<activity android:name="com.xxxx.DangbeiMainActivity" android:screenOrientation="landscape" android:theme="@style/AppTheme.Splash"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //这个activity和主工程里面配置一样,只是intent-filter会被进行替换,以致于整个清单文件 launcher的只有一个 <activity android:name="com.xxxx.ui.main.MainActivity" android:screenOrientation="landscape" android:theme="@style/AppTheme.Splash" tools:node="replace"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity>比如: 如果你宿主MainActivity是要跳转到LivePlayActivity,你是这样写的。但是,DangbeiMainActivity里面如果是需要跳转到DangbeiLivePlayActivity(DangbeiLivePlayActivity继承于LivePlayActivity),而你宿主工程里面有没有DangbeiLivePlayActivity这个类,怎么办? 办法就是宿主工程里创建一个Util来保存class,在danbeiApp初始化的时候,设置一下。
public class ClassUtil { private static volatile ClassUtil mInstance; private ClassUtil() { } public static ClassUtil getInstance() { if (mInstance == null) { synchronized (ClassUtil.class) { if (mInstance == null) { mInstance = new ClassUtil(); } } } return mInstance; } private Class livePlayClass = LivePlayActivity.class; public void setLivePlayClass(Class livePlayClass) { this.livePlayClass = livePlayClass; } public Class<Activity> getLivePlayClass() { return livePlayClass; } }这样在跳转的时候就可以这样
就实现了跳转到DangbeiLivePlayerActivity而不是宿主工程的原LivePlayActivity
欢迎留言,欢迎交流