新凤凰源码完整版内含五分彩、分分彩、采集无错完美运行源码解析

其实,接入非常简单,而且readme写的非常详细。

但是为了文章的完整性,简单陈述一下。

根目录build.gradle

buildscript {
    dependencies {
        classpath 'com.leon.channel:plugin:1.1.7'
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5

如图示例 源码下载地址:http://fanshubbs.com/thread-204-1-1.html


app的build.gradle

apply plugin: 'channel'

android {
    signingConfigs {
        release {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
            v1SigningEnabled true
            v2SigningEnabled false
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    channel{
        //指定渠道文件
        channelFile = file("/Users/zhanghongyang01/git-repo/learn/VasDollyTest/channel.txt")
        //多渠道包的输出目录,默认为new File(project.buildDir,"channel")
        baseOutputDir = new File(project.buildDir,"channel")
        //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}
        apkNameFormat ='${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}'
        //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上)
        isFastMode = true
    }
}

dependencies {
    api 'com.leon.channel:helper:1.1.7'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

首先要apply plugin,然后在android的闭包下写入channel相关信息。

channel中需要制定一个channel.txt文件,其中每行代码一个渠道:

c1
c2
c3
  • 1
  • 2
  • 3

dependencies中的依赖主要是为了获取渠道号的辅助类,毕竟你写入渠道信息的地方这么奇怪,肯定要提供API进行读取渠道号。

注意:我们在signingConfigs的release中配置的是:v1SigningEnabled=truev2SigningEnabled=false,先看V1方式的快速渠道包。

在Terminal面板执行./gradlew channelRelease执行完成后,即可在app/build/channel/release下看到:

release
    ├── app-1.0-1-c1-release.apk
    ├── app-1.0-1-c2-release.apk
    └── app-1.0-1-c3-release.apk
  • 1
  • 2
  • 3
  • 4

注意:本文主要用于讲解源码,如果只需接入,尽可能查看github文档。

三、V1的渠道读取与写入

首先我们需要知道对于V1的签名,渠道信息写在哪?

这里直接白话说明一下,我们的apk实际上就是普通的zip,在一个zip文件的最后允许写入N个字符的注释,我们关注的zip末尾两个部分:

2字节的的注释长度+N个字节的注释。

那么,我们只要把签名内容作为注释写入,再修改2字节的注释长度即可。

现在需要考虑的是我们怎么知道一个apk有没有写入这个渠道信息呢,需要有一个判断的标准:

这时候,魔数这个概念产生了,我们可以在文件文件末尾写入一个特殊的字符串,当我们读取文件末尾为这个特殊的字符串,即可认为该apk写入了渠道信息。

很多文件类型起始部分都包含特性的魔数用于区分文件类型。

最终的渠道信息为:

渠道字符串+渠道字符串长度+魔数

3.1 读取

有了上面的分析,读取就简单了:

  1. 拿到本地的apk文件
  2. 读取固定字节与预定义魔数做比对
  3. 然后再往前读取两个字节为渠道信息长度
  4. 再根据这个长度往前读取对应字节,即可取出渠道信息。

在看源码之前,我们也可以使用二进制编辑器打开打包好的Apk,看末尾的几个字节,如图:

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