中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Android Studio封裝SDK的那些事兒

發布時間:2020-09-25 05:40:01 來源:腳本之家 閱讀:378 作者:AxeChen 欄目:移動開發

前言

首先SDK是提供給別人調用的工具。所以常見的SDK都是以jar包,so庫,aar包等方式導入APP項目中。然后提供一些公開的API供接入方調用。所以在Androidstudio中如果需要生成jar或者aar,就需要將module變成library。

1、AndroidStudio生成library

在這里介紹AndroidStudio兩種生成library的方式。

1.1、兩種生成library的方式

新建library module。

關于Android Studio封裝SDK的那些事兒

這種會直接生成可編譯成jar和aar的module。

新建Android項目,然后修改app下的build.gradle

關于Android Studio封裝SDK的那些事兒

將  apply plugin: 'com.android.application'修改成apply plugin: 'com.android.library'

然后去掉applicationId "com.mg.axe.helloworld"就把可運行的Android module變成了一個library module。

注意:這種方式在編譯前一定要做以下事情

  • 刪除自定義的Application和在AndroidManifest.xml的配置。
  • 去點入口的Activity,否則在Android Studio接入時會生成兩個圖標入口。

1.1、使用gradle所帶的命令編譯

這些命令可以自己在控制臺使用,可以直接點開右上角的Gradle直接使用。

關于Android Studio封裝SDK的那些事兒

assembleRelease&assembleDebug

關于Android Studio封裝SDK的那些事兒

在build下的assembleRelease和assembleDebug都可以生成aar包。這邊和APP開發很相似,可以在buildTypes下對release包做混淆等等操作。

如果編譯的命令執行完畢,可以在當前module下的build文件下找到編譯好的.aar文件。

關于Android Studio封裝SDK的那些事兒

如果需要jar包,則只需將這個aar文件解壓即可。

關于Android Studio封裝SDK的那些事兒

classes.jar就是編譯成jar的class文件。

1.2、aar和jar

  • .aar是適用于AndroidStudio的接入方式,不需要過多的考慮當SDK存在界面,圖片等資源文件的情況。解壓aar也可以看到,aar是一個將源碼(jar)和資源文件都打包好的文件。當然也可以在eclipse中使用,前提是eclipse需要安裝gradle編譯環境。
  • jar只包含編譯好的源代碼,如果SDK包含資源文件,則需要額外導入,適用于eclipse導入;AndroidStudio也同樣適用,不過當SDK包含資源文件時,導入aar將會更方便。

2、兩種接入方式

一般情況接入方式為AndroidStudio和Eclipse。其他的接入方式就不考慮了,可能大同小異,最主要的是其他的接入方式我也不會。

關于Android Studio封裝SDK的那些事兒
手動滑稽

2.1、AndroidStudio接入方式

這里只介紹.aar的接入方式,AndroidStudio接入jar方式就不做介紹。

將.aar文件復制到項目的libs中。

并在app下的build.gradle中的android中添加如下代碼

repositories{
  flatDir {
   dirs 'libs'
  }
 }

在dependencies中添加依賴的代碼

 // implementation(name: 'aar包的名字', ext: 'aar')
 implementation(name: 'game_sdk', ext: 'aar')

然后點擊同步(Sync Now),就成功的將.arr導入項目了。

可以在External Libraries中找到導入的aar依賴。

關于Android Studio封裝SDK的那些事兒

關于Android Studio封裝SDK的那些事兒

點開aar,可以看(源代碼)jar和(資源文件)res。

2.2、Eclipse接入方式

eclipse一般是接入jar包的方式接入SDK,當SDK存在界面、資源文件時,接入方式比AndroidStudio接入aar稍微麻煩點,需要將jar包和資源文件分開導入。

  • 解壓aar文件。
  • 將jar包復制到libs文件加下,并添加依賴(add to path) 。
  • 如果有資源文件,則需要將res下的資源文件復制到項目對應的位置。
  • 如果SDK用到了Activity等組件,還需去注冊等,這些都應在SDK接入文檔中指明清楚。

2.3、兩種接入方式都需要注意的問題

在SDK中聲明的權限,制定的Android版本范圍等都要在SDK接入文檔中指明清楚。

3、可能踩的坑

3.1、資源文件無法獲取的問題。

如果編譯好的jar中使用了資源文件,然后使用了R.xx.xx這樣的代碼,可能會出現這樣的異常。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/ysyc/axechen/R$id

找不到id。最后是參照開源的TypeSDK才解決了這個問題。通過如下的方法去尋找id。

public class GetResId {
 public static int getId(Context context, String paramString1, String paramString2) {
  return context.getResources().getIdentifier(paramString2, paramString1, context.getPackageName());
 }
}

加載布局和控件的方法:

// 獲取布局id
GetResId.getId(this, "layout", "activity_main")

// 獲取控件id
GetResId.getId(this, "id", "login")

3.2、三方包沖突問題

如果SDK用到了三方庫,然后接入方的項目中也用到了同樣的三方庫,那么當編譯的時候就會出現類沖突,無法編譯通過。這個時候就要求在編譯SDK時不要將三方的依賴編譯到SDK的jar中。那么在添加依賴時需要使用compileOnly關鍵字。

compileOnly files('libs/gson-2.8.5.jar')

或者

compileOnly 'com.google.code.gson:gson:2.8.5'

這樣才不會將引入的依賴編譯到SDK的jar中,這個時候需要接入方導入這些依賴,當然SDK的接入文檔要詳細說明。

3.3、請使用最平常的api和習慣

最好不去使用一些新的特性。如果接入方沒有使用到這些特性,可能編譯無法通過,尤其是eclipse接入時會出現更多問題。我遇到的問題:我在編譯SDK時就是因為使用了lamada表達式導致eclipse無法編譯通過。

4、混淆

SDK的混淆和做app的混淆是一樣的。

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

在混淆的時候,如果使用了三方庫,三方庫混淆的要求同樣需要加上混淆。
如果接入方需要做混淆,請記住加上SDK的混淆要求和三方庫的混淆要求。免得SDK的代碼混淆之后又被接入方混淆導致出錯。

5、關于SDK的其他解決方案

實際上,用原生的界面做SDK并不是非常好的解決方案,主要是不利于SDK的更新和跨平臺。最好的方式是加載H5,更新起來更方便,SDK實現起來更簡單。

6、一些開源的SDK

https://github.com/typesdk/TypeSDK

https://github.com/zuowutan/ShareGameSdk

注意事項:

1.所有的內容都需要依賴這個acitivity.他是sdk上下文.

2.Sdk的所有內容圍繞著這個activity來寫就行了

3.把這個activity當成一個普通類使用

4.Sdk最大的問題就是它里面的所有內容都是沒有生命周期的.

5.只有之前創建聲明過的那個activity 有生命周期.原理大概是這樣的,其他的自己查資料.

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

壶关县| 汪清县| 博乐市| 定陶县| 高州市| 准格尔旗| 北川| 江陵县| 唐山市| 天峨县| 铜鼓县| 栾城县| 洪江市| 灵武市| 和龙市| 浦城县| 富顺县| 中超| 时尚| 淳安县| 沂南县| 滕州市| 乌兰浩特市| 博野县| 铜川市| 察哈| 黎城县| 应城市| 松滋市| 连云港市| 苏尼特左旗| 云霄县| 庆安县| 延庆县| 萨嘎县| 汝州市| 万荣县| 湘阴县| 三都| 淮安市| 洞口县|