Androidコンポーネントの開発(1)--Mavenプライベートサービスの構築

序文

コンポーネント化については、私たち全員がある程度理解しています。基本的に、一部の大規模なインターネットアプリでは、コンポーネント化が開発に使用されます。これは、インタビューの最優先事項でもあります。このコラムでは、プロジェクトの知識システム全体を、実際のプロジェクト。

次の図は、後で説明する必要がある実際のプロジェクトフレームワークです。

コンポーネントdevelopment.png

今日は、最初にプロジェクトフレームワークについて説明しません。コンポーネント化されたフレームワークプロジェクトへの道を開くために、Mavenプライベートサーバーを作成しましょう。

序章

mavenプライベートサーバーは、実際には部門、LANにウェアハウスをセットアップするためのものmavenであり、LAN内のすべての開発者はウェアハウスを使用できます。

1.Mavenライブラリintroduction.png

中央仓库PS:プライベートサーバーに独自のローカルウェアハウスを追加することも、パッケージをプロキシすることもできます。結局のところ、ネットワークが貧弱な一部の環境では、中央ウェアハウスからデータを取得するのは時間のかかる操作です。

アドバンテージ

1.独自の外部帯域幅を節約します。

2.ビルドプロセスをスピードアップします

3.サードパーティコンポーネントを展開できます

4.安定性を向上させ、制御を強化します

5.中央倉庫の負荷を軽減します

Mavenプライベートサーバーadvantage.png

Mavenプライベートサーバーを構築する方法

1. 官网下载 Mavenプライベートサーバーランチャー   に移動しますnexus

住所:www.sonatype.com/

2.ダウンロード後、構成後环境变量

コマンドラインで入力します。nexus /run

3.ネクサスが正常に開始した後:ブラウザに次のように入力します。

http://localhost:8081/
  • 起動インターフェイスは次のとおりです。

2. nexus interface.png

sign in右上隅のボタンをクリックします。

入力用户名和密码

ユーザー名とパスワードシステムは、どのディレクトリでプロンプトを表示します

4.ログインに成功した後:

  • ナビゲーションバーの[設定]ボタン->[リポジトリ]をクリックして、リポジトリリストに入ります

3.倉庫建設.png

4Warehouse.png

  • クリックcreate Repositoryして、新しいローカルエリアネットワークリポジトリを作成します。

Androidプロジェクト用に作成されたMavenリポジトリにmaven2を選択したため:

5mavenwarehouse.png

ここには3つのmaven2タイプのリポジトリがあります。

*hosted*:ローカルLANプライベートサーバーは、公式倉庫と同様に、ローカルプライベートライブラリ機能を提供します

*proxy*:他のウェアハウスをプロキシする機能を提供します。これは、このリポジトリがリモートウェアハウス(次のようなjcenter googleリモートセントラルウェアハウスなど)をプロキシできることを示します。

*group*:组合多个仓库为一个地址使用

这里我们选择hosted仓库即可,大家可以根据自己需求选取

6maven.png

1.输入仓库名称

2.设置maven类型:

*release*:表示是一个该仓库存储的是一个release版本的第三方库

*snapshot*:表示存储的是一个不稳定第三方库,需要进程去私服或者中央仓库拉数据:

<repositorys>
    <repository>
        <id>****</id>
        <url>***</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>(always/ daliy/  interval/ never)</updatePolicy>
        </snapshot>
    </repository>
</repository>

updatePolicy:表示更新的频率:

        always:每次都需要拉去     daliy:表示每天需要拉取     interval:按分钟拉取     nerver:和release版本一样,不需要重复拉取

点击确定后就创建的一个maven私服:

点击该仓库就可以看到对应的url,这个url就是我们私服的地址。需要在项目中引用:

7maven.png

经过上面的步骤后,我们就搭建好了一个maven私服,局域网内用户都可以拉取使用

实战中maven私服接入:

1.第三方lib库的上传操作

使用as创建一个新的项目,在新建项目下创建一个lib库,命名为:lib_vedio:并在lib_vediobuild.gradle工程文件下面,引入maven库:

实现uploadArchives的task方法:这个方法用于上传lib库:

plugins {
    id 'com.android.library'
    id 'maven'
}

//上传的类库名称
def _artifactId = this.getName() 
//类库版本
def pomVersionName = '1.0.1'
def pomName = this.getName()
//类库描述
def pomDescription = 'the vedio library for all project'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url:NEXUS_REPOSITORY_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            pom.project {
                name pomName
                version pomVersionName
                description pomDescription
                artifactId _artifactId
                groupId POM_GROUPID
                packaging POM_PACKAGING
            }
        }
    }
}

里面一些变量是在gradle.properties中设置的全局变量:

NEXUS_REPOSITORY_URL=http://localhost:8081/repository/anna_release/
POM_GROUPID=com.anna.android
POM_PACKAGING=aar
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123456

设置好后,执行uploadArchives任务,这个时候我们本地的lib_vedio库就会上传到我们之前搭建的maven私服上:

8maven.png

这里因为我们上传了两个版本1.0.0和1.0.1

切记:

如果当前仓库选择的是release属性:则每次上传的版本不能一致,需要在原版本基础上增加

如果选择的是snapshot属性:则可以在不增加版本号的前提下,修改同一版本的代码并上传。

maven私服仓库的接入:

我们在项目的build.gradle文件中引入maven库:

buildscript {
    repositories {
        google()
        jcenter()
        maven {
            url = 'http://localhost:8081/repository/anna_release/'
            credentials {
                username = 'admin'
                password = 'admin123456'
            }
        }

    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.1"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url = 'http://localhost:8081/repository/anna_release/'
            credentials {
                username = 'admin'
                password = 'admin123456'
            }
        }
    }
}

并在app模块引入lib库文件:

implementation 'com.anna.android:lib_video:1.0.1'

这样就可以在我们项目中愉快使用类库啦。

总结

Mavenリポジトリについては以上です。将来的には、コンポーネント化された開発における各コンポーネントのカプセル化機能と、コンポーネントの直接的な事前依存関係の分離、つまり、Alibabaのオープンソースフレームワークの使用方法と実装方法を紹介します。コンポーネントの個別のテスト。

おすすめ

転載: juejin.im/post/7118646272323485709