您好,登錄后才能下訂單哦!
前言
首先SDK是提供給別人調用的工具。所以常見的SDK都是以jar包,so庫,aar包等方式導入APP項目中。然后提供一些公開的API供接入方調用。所以在Androidstudio中如果需要生成jar或者aar,就需要將module變成library。
1、AndroidStudio生成library
在這里介紹AndroidStudio兩種生成library的方式。
1.1、兩種生成library的方式
新建library module。
這種會直接生成可編譯成jar和aar的module。
新建Android項目,然后修改app下的build.gradle
將 apply plugin: 'com.android.application'修改成apply plugin: 'com.android.library'
然后去掉applicationId "com.mg.axe.helloworld"就把可運行的Android module變成了一個library module。
注意:這種方式在編譯前一定要做以下事情
1.1、使用gradle所帶的命令編譯
這些命令可以自己在控制臺使用,可以直接點開右上角的Gradle直接使用。
assembleRelease&assembleDebug
在build下的assembleRelease和assembleDebug都可以生成aar包。這邊和APP開發很相似,可以在buildTypes下對release包做混淆等等操作。
如果編譯的命令執行完畢,可以在當前module下的build文件下找到編譯好的.aar文件。
如果需要jar包,則只需將這個aar文件解壓即可。
classes.jar就是編譯成jar的class文件。
1.2、aar和jar
2、兩種接入方式
一般情況接入方式為AndroidStudio和Eclipse。其他的接入方式就不考慮了,可能大同小異,最主要的是其他的接入方式我也不會。
手動滑稽
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依賴。
點開aar,可以看(源代碼)jar和(資源文件)res。
2.2、Eclipse接入方式
eclipse一般是接入jar包的方式接入SDK,當SDK存在界面、資源文件時,接入方式比AndroidStudio接入aar稍微麻煩點,需要將jar包和資源文件分開導入。
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 有生命周期.原理大概是這樣的,其他的自己查資料.
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。