一個存在多個模塊(包含Native)的工程的gradle構建的事例

簡介

An Android Project with more than one module,the app module(some api developed by jni) depend on an Android Library which has native so.

該項目是一個使用Android Studio創建的,通過gradle編譯的,存在多個模塊的工程的gradle構建的事例。其中存在多個模塊的工程中包含:

  • 一個Android Library的模塊,該模塊使用了第三方的jar和so
  • 一個Android Application模塊,該模塊引用上面的Android Library,自身包含jni的接口調用。

代碼地址:

Github: https://github.com/bihe0832/Android-gradle-jni-so

體驗方式

  • Demo 下載:
  • 運行工程:

    • 使用Android Studio 逐個導入
    • 直接在根目錄運行build.sh

工程介紹

在項目中存在兩個Android Studio的工程

GradleTest

GradleTest是核心工程,它里面包含了一個Android Library的模塊gradletestlibrary和一個Android Application的模塊app。

  • gradletestlibrary

    一個Android Library的模塊,他引入了第三方的so和jar(MD5工程的編譯產出),并對第三方的jar和so做了封裝和調用。

  • app

    一個Android Application的模塊,他引用gradletestlibrary,同時里面包含jni的代碼,通過native的方式調用gradletestlibrary提供的方法。

MD5

一個普通的Android 工程,他包含java和jni代碼,最終打包后對外提供jar包和so。模擬第三方的jar和so提供給GradleTest使用。

關鍵代碼結構

Android-gradle-jni-so
    │
    ├─── build.sh 生成最終產出物的簡單構建腳本,直接運行會生成最終的資源、apk和核心文件
    │
    ├─── GradleTest 核心工程,一個存在多個Module的Android工程
    │     │
    │     ├── app 基于Android Application的模塊,引用gradletestlibrary,通過native的方式調用接口。
    │     │
    │     └── gradletestlibrary 基于Android Library的模塊,引入MD5提供的jar和so
    │     
    ├─── MD5 普通Android工程,他包含java和jni代碼,最終打包后對外提供jar包和so
    │
    └─── README.md 項目工程介紹

接口調用

下面用圖示簡單梳理demo中獲取大寫md5值的函數調用流程

使用場景

說實話,這么設計一個工程是有點復雜,但是卻存在實實際際的使用場景。上面的工程是自己根據一直以來SDK開發時實際經驗總結,下面對該事例中的兩個工程以及對應模塊做個現實中的身份映射。

一點說明

首先、這個完整的架構是主要是提供給SDK的開發者或者大型項目存在公共代碼庫的情況下使用的。如果項目代碼很少,確實不用搭建如此復雜的框架。

具體身份映射

  • MD5 ———— 映射SDK開發者或者項目公共庫依賴的第三方庫,例如SDK的開發者會用到一些第三方的數據統計、賬號登陸SDK等
  • GradleTest ———— SDK開發者或者項目的工程
    • gradletestlibrary SDK的具體實現,或者公共庫的具體實現,最終可能也會以jar、甚至so的方式對外提供
    • app 具體的應用工程,可能是SDK的開發者對外提供的配套demo,也可能是具體的開發者的應用工程,這就是一個普通的Android工程。

特別說明

  1. 本文檔只是重點介紹整個項目的工程架構,對于具體的語法沒有做說明,后續會逐步整理增加到博客。
  2. 目前gradle支持native構建需要使用特定的gradle版本和gradle tools版本,因此不要修改項目build.gradle中buildscript內對于gradle tools的版本的聲明以及根目錄gradle下gradle-wrapper.properties中對于gradle版本的說明。也就是說:
    • 必須使用gradle-2.5-all 和 com.android.tools.build:gradle-experimental:0.2.+
    • build.gradle 代碼如下:

        buildscript {
            repositories {
                maven { url 'http://maven.oschina.net/content/groups/public/' }
                jcenter()
            }
            dependencies {
                classpath "com.android.tools.build:gradle-experimental:0.2.+"
            }
        }
    • gradle-wrapper.properties 內容如下:

        #Tue Dec 15 16:08:58 CST 2015
        distributionBase=GRADLE_USER_HOME
        distributionPath=wrapper/dists
        zipStoreBase=GRADLE_USER_HOME
        zipStorePath=wrapper/dists
        distributionUrl=http\://services.gradle.org/distributions/gradle-2.5-all.zip

來自: http://blog.bihe0832.com/gradle-test.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!