老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

android開發(fā)插件,安卓開發(fā)插件

如何使用Android Studio 開發(fā)Gradle插件

Gradle插件開發(fā)

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出海拉爾免費做網(wǎng)站回饋大家。

Gradle插件是使用Groovy進行開發(fā)的,而Groovy其實是可以兼容Java的。Android?Studio其實除了開發(fā)Android App外,完全可以勝任開發(fā)Gradle插件這一工作,下面來講講具體如何開發(fā)。

首先,新建一個Android項目。

之后,新建一個Android Module項目,類型選擇Android Library。

將新建的Module中除了build.gradle文件外的其余文件全都刪除,然后刪除build.gradle文件中的所有內(nèi)容。

在新建的module中新建文件夾src,接著在src文件目錄下新建main文件夾,在main目錄下新建groovy目錄,這時候groovy文件夾會被Android識別為groovy源碼目錄。除了在main目錄下新建groovy目錄外,你還要在main目錄下新建resources目錄,同理resources目錄會被自動識別為資源文件夾。在groovy目錄下新建項目包名,就像Java包名那樣。resources目錄下新建文件夾META-INF,META-INF文件夾下新建gradle-plugins文件夾。這樣,就完成了gradle 插件的項目的整體搭建,之后就是小細節(jié)了。目前,項目的結(jié)構(gòu)是這樣的。

打開Module下的build.gradle文件,輸入

apply plugin: 'groovy'

apply plugin: 'maven'

dependencies {

compile gradleApi()

compile localGroovy()

}

repositories {

mavenCentral()

}12345678910111234567891011

下面我們在包名下新建一個文件,命名為PluginImpl.groovy,注意有g(shù)roovy后綴,然后在里面輸入,注意包名替換為你自己的包名。

package cn.edu.zafu.gradle

import org.gradle.api.Plugin

import org.gradle.api.Project

public class PluginImpl implements PluginProject {

void apply(Project project) {

project.task('testTask') {

println "Hello gradle plugin"

}

}

}123456789101112123456789101112

然后在resources/META-INF/gradle-plugins目錄下新建一個properties文件,注意該文件的命名就是你只有使用插件的名字,這里命名為plugin.test.properties,在里面輸入

implementation-class=cn.edu.zafu.gradle.PluginImpl11

注意包名需要替換為你自己的包名。

這樣就完成了最簡單的一個gradle插件,里面有一個叫testTask的Task,執(zhí)行該task后會輸出一段文字,就像當初我們輸出HelloWorld一樣。

有什么好用的Android Studio的插件值得推薦

android studio常用插件,可極大簡化開發(fā),增強開發(fā)效率。

1、ButterKnife Zelezny

ButterKnife 注解生成器,使用起來非常簡單方便,使用ButterKnife的有福了!

2、SelectorChapek

設(shè)計師給我們提供好了各種資源,每個按鈕都要寫一個selector是不是很麻煩?這么這個插件就為解決這個問題而生,你只需要做的是告訴設(shè)計師們按照規(guī)范命名就好了,其他一鍵搞定。按照不同狀態(tài)(normal、pressed)的標準命名后,右鍵文件樹Generate

Android Selectors見inmite/android-selector-chapek · GitHub。

3、GsonFormat

現(xiàn)在大多數(shù)服務(wù)端api都以json數(shù)據(jù)格式返回,而客戶端需要根據(jù)api接口生成相應(yīng)的實體類,這個插件把這個過程自動化了,趕緊使用起來吧。

4、Android Parcelable Code Generator

Android中的序列化有兩種方式,分別是實現(xiàn)Serializable接口和Parcelable接口,但在Android中是推薦使用Parcelable,只不過我們這種方式要比Serializable方式要繁瑣,那么有了這個插件一切就ok了。

5、LeakCanary

如何使用Android Studio開發(fā)Gradle插件

使用Android Studio開發(fā)Gradle插件的步驟:

1 創(chuàng)建Gradle Module

AndroidStudio中是沒有新建類似Gradle Plugin這樣的選項的,那我們?nèi)绾卧贏ndroidStudio中編寫Gradle插件,并打包出來呢?

(1) 首先,你得新建一個Android Project

(2) 然后再新建一個Module,這個Module用于開發(fā)Gradle插件,同樣,Module里面沒有g(shù)radle plugin給你選,但是我們只是需要一個“容器”來容納我們寫的插件,因此,你可以隨便選擇一個Module類型(如PhoneTablet Module或Android Librarty),因為接下來一步我們是將里面的大部分內(nèi)容刪除,所以選擇哪個類型的Module不重要。

(3) 將Module里面的內(nèi)容刪除,只保留build.gradle文件和src/main目錄。

由于gradle是基于groovy,因此,我們開發(fā)的gradle插件相當于一個groovy項目。所以需要在main目錄下新建groovy目錄

(4) groovy又是基于Java,因此,接下來創(chuàng)建groovy的過程跟創(chuàng)建java很類似。在groovy新建包名,如:com.hc.plugin,然后在該包下新建groovy文件,通過new-file-MyPlugin.groovy來新建名為MyPlugin的groovy文件。

(5) 為了讓我們的groovy類申明為gradle的插件,新建的groovy需要實現(xiàn)org.gradle.api.Plugin接口。如下所示:

package com.hc.plugin

import org.gradle.api.Plugin

import org.gradle.api.Project

public class MyPlugin implements Pluginproject {/project

void apply(Project project) {

System.out.println("========================");

System.out.println("hello gradle plugin!");

System.out.println("========================");

}

}

因為我本人對groovy也不是特別熟悉,所以我盡可能的用Java語言,使用System.out.println而不是用groovy的pintln "",我們的代碼里面啥也沒做,就打印信息。

(6) 現(xiàn)在,我們已經(jīng)定義好了自己的gradle插件類,接下來就是告訴gradle,哪一個是我們自定義的插件類,因此,需要在main目錄下新建resources目錄,然后在resources目錄里面再新建META-INF目錄,再在META-INF里面新建gradle-plugins目錄。最后在gradle-plugins目錄里面新建properties文件,注意這個文件的命名,你可以隨意取名,但是后面使用這個插件的時候,會用到這個名字。比如,你取名為com.hc.gradle.properties,而在其他build.gradle文件中使用自定義的插件時候則需寫成:

apply plugin: 'com.hc.gradle'

然后在com.hc.gradle.properties文件里面指明你自定義的類

implementation-class=com.hc.plugin.MyPlugin

現(xiàn)在,你的目錄應(yīng)該如下:

(7) 因為我們要用到groovy以及后面打包要用到maven,所以在我們自定義的Module下的build.gradle需要添加如下代碼:

apply plugin: 'groovy'

apply plugin: 'maven'

dependencies {

compile gradleApi()

compile localGroovy()

}

repositories {

mavenCentral()

}

2 打包到本地Maven

前面我們已經(jīng)自定義好了插件,接下來就是要打包到Maven庫里面去了,你可以選擇打包到本地,或者是遠程服務(wù)器中。在我們自定義Module目錄下的build.gradle添加如下代碼:

group='com.hc.plugin'

version='1.0.0'

uploadArchives {

repositories {

mavenDeployer {

repository(url: uri('D:/repos'))

}

}

}

其中,group和version后面會用到,我們后面再講。雖然我們已經(jīng)定義好了打包地址以及打包相關(guān)配置,但是還需要我們讓這個打包task執(zhí)行。點擊AndroidStudio右側(cè)的gradle工具,如下圖所示:

可以看到有uploadArchives這個Task,雙擊uploadArchives就會執(zhí)行打包上傳啦!執(zhí)行完成后,去我們的Maven本地倉庫查看一下:

其中,com/hc/plugin這幾層目錄是由我們的group指定,myplugin是模塊的名稱,1.0.0是版本號(version指定)。

Android 插件化

原理:實現(xiàn)原理上都選擇盡量少的hook,通過在manifest上預(yù)埋一些組件實現(xiàn)四大組件的插件化。其中Small更形成了一個跨平臺、組件化的框架。

VirtulApp:

能夠完全模擬app的運行環(huán)境,能夠?qū)崿F(xiàn)免安裝應(yīng)用和雙開技術(shù)。

Atlas:

阿里出品,號稱是一個容器化框架,結(jié)合了組件化和熱更新技術(shù)。

Android中有兩種類加載器,DexClassLoader和PathClassLoader,它們都繼承于BaseDexClassLoader。

兩者的區(qū)別:DexClassLoader多了一個optimizedDirectory的路徑參數(shù),這個目錄必須是內(nèi)部存儲路徑,用于緩存系統(tǒng)創(chuàng)建的Dex文件。

所以我們可以使用DexClassLoader去加載外部Apk中的類。

ClassLoader調(diào)用loadClass方法加載類采用了雙親委托機制來避免重復(fù)加載類。

首先,ClassLoader會查看自身已經(jīng)加載的類中是否已經(jīng)存在此類,如不存在,然后,則會使用父類來加載此類,如不能成功加載,則會使用自身重載于BaseDexClassLoader的findClass()方法來加載此類。

DexClass的DexPathList在DexClass的構(gòu)造器中生成,findClass()方法則是從DexPathList下面找出對應(yīng)的DexFile,循環(huán)DexElements,通過dexElement.dexFile取出對應(yīng)的DexFile,再通過DexFile.loadClassBinaryName()加載對應(yīng)的類。

作用:使用插件DexClassLoader加載出需要的類。

通過每一個插件的DexClassLoader加載出自身所需要的類,當每一個插件需要加載相同的類庫時,可采用該類庫的不同版本來使用。

通過把每一個插件的pathList(DexFile)合并到主app的DexClassLoader上,來使各個插件和主app直接能夠相互調(diào)用類和方法,并且各個插件中相同的功能可以抽取出來作為一個Common插件供其它插件使用。

插件調(diào)用主工程

在ClassLoader構(gòu)造時指定主工程的DexClassLoader為父加載器即可直接調(diào)用主工程中的類和方法。

主工程調(diào)用插件

如果是多DexClassLoader的情況,則需要通過插件的DexClassLoader加載對應(yīng)的類并反射調(diào)用其方法。此種情況,主工程一般會在一個統(tǒng)一的地方對訪問插件中的類和方法做一些訪問權(quán)限的管理及配置。

如果是單DexClassLoader的情況,則可以直接調(diào)用插件中的類和方法。但是當多個插件引用的庫的版本不同時,會出現(xiàn)錯誤,因此,建議采用Gradle版本依賴管理統(tǒng)一處理主工程及各個插件的庫依賴。

Android通過Resource來加載資源,只要有插件apk,就可以使用assertManager.addAssertPath(apkPath)的方式來生成assertManager,再使用其new出對應(yīng)的Resource對象即可。

注意:由于AssertManager并不是Public,所以需要通過反射的方式去調(diào)用它。并且由于一些Rom對Resource的處理,所以,需要兼容處理。

有2種處理方式:

產(chǎn)生的原因:由于主工程和各個插件引用的Resource id重復(fù)產(chǎn)生的沖突。

解決思路:Android中的資源在系統(tǒng)中是以8位16進制0XPPTTRRRR的方式存在,其中PP即是資源區(qū)分的區(qū)域(Android系統(tǒng)只用它來區(qū)分系統(tǒng)資源和應(yīng)用資源),只要讓每一個插件的PP段取不同的值即可解決資源id沖突的問題。

具體解決方式:

1.修改aapt源碼,編譯期修改PP段。

2.修改Resource的arsc文件,其中的每一條都包含了資源id和映射路徑。

Activity的處理最為復(fù)雜,有兩種處理方式:

1.ProxyActivity的方式。

2.預(yù)埋StubActivity,hook系統(tǒng)啟動Activity的過程。

原理:VirtualAPK通過替換了系統(tǒng)的Instrumentation,hook了Activity的啟動和創(chuàng)建,省去了手動管理插件Activity生命周期的繁瑣,讓插件Activity像正常的Activity一樣被系統(tǒng)管理,并且插件Activity在開發(fā)時和常規(guī)一樣,即能獨立運行又能作為插件被主工程調(diào)用。

Android插件化方向主要有2個方向:

Android 插件化

Android Studio有哪些非常好用的插件

android-postfix-plugin可根據(jù)后綴快速完成代碼,這個屬于拓展吧,系統(tǒng)已經(jīng)有這些功能,如sout、notnull等,這個插件在原有的基礎(chǔ)上增添了一些新的功

AndroidAccessors快速生成get和set方法的插件,其實系統(tǒng)的也有類似功能,這個更快。

Lifecycle-Sorter

可以根據(jù)Activity或者fragment的生命周期對其生命周期方法位置進行先后排序, 快捷鍵Ctrl + alt + K

JsonOnlineViewer

可實現(xiàn)直接在android studio中調(diào)試接口數(shù)據(jù),可以選擇請求類型,自定義請求頭及請求體,json數(shù)據(jù)格式化后展示

CodeGlance

可用于快速定位代碼,類似于Sublime編輯器右側(cè)定位視圖

idea-android-studio-plugin

IntelliJ IDEA / Android Studio plugin with some tools and usability improvements

folding-plugin

可以給資源文件分組,并且不移動文件,也不會創(chuàng)建文件夾:Android File Grouping Plugin

Android Drawable Importer

為了適應(yīng)所有Android屏幕的大小和密度,每個Android項目都會包含drawable文件夾。任何具備Android開發(fā)經(jīng)驗的開發(fā)人員都知道,為了支持所有的屏幕尺寸,你必須給每個屏幕類型導(dǎo)入不同的畫板。Android Drawable Importer插件能讓這項工作變得更容易。它可以減少導(dǎo)入縮放圖像到Android項目所需的工作量。Android Drawable Importer添加了一個在不同分辨率導(dǎo)入畫板或縮放指定圖像到定義分辨率的選項。這個插件加速了開發(fā)人員的畫板工作。

Android ButterKnife Zelezny

用于在活動、片段和適配器中,從所選的XML布局文件生成ButterKnife注入。該插件提供了生成XML對象注入的最快方式。

Android Holo Colors Generator

開發(fā)Android應(yīng)用程序需要偉大的設(shè)計和布局。Android Holo Colors Generator則是定制符合喜好的Android應(yīng)用程序的最簡單方法。Android Holo Colors Generator是一個允許你為你的應(yīng)用程序隨心所欲地創(chuàng)建Android布局組件的插件。此插件會生成所有必要的可在項目中使用的相關(guān)的XML畫板和樣式資源。

Android Parcelable code generator

生成實現(xiàn)了Parcelable接口的代碼的插件。在你的類中,按下alt + insert鍵彈出插入代碼的上下文菜單,你會看到在下面有一個Parcelable,如下所示。選擇它之后,就會在你的類當中插入實現(xiàn)了Parcelable接口的代碼。從此不用再手動寫Parcelable代碼

AndroidCodeGenerator

可以生成ViewHolder和findView方法的代碼。尤其是在Adapter實現(xiàn)類的getView當中很有用。

Android Layout ID Converter

生成findView代碼的使用方法。

SelectorChapek for Android

生成Selector的插件。你需要在drawable文件夾中右鍵,在彈出的菜單中選擇Generate Android Selectors,如下所示,它就會根據(jù)你的幾個drawable文件夾里的資源的命名,幫你生成Selector代碼。當然,你的資源文件需要根據(jù)約定的后綴來命名。比如按下狀態(tài)為_pressed,正常狀態(tài)為_normal,不可用狀態(tài)為_disable,等等

genymotion-gradle-plugin

不同于圖形化的genymotion插件,這個允許你通過腳本來配置,創(chuàng)建device。

sdk-manager-plugin

SDK管理插件,自動檢測更新并下載。

otto-intellij-pluginotto事件導(dǎo)航工具。

dagger-intellij-plugin

dagger可視化輔助工具。

eventbus-intellij-plugin

eventbus導(dǎo)航插件

eventbus3-intellij-plugin

eventbus導(dǎo)航插件

strings-xml-tools

管理Android工程中字符串國際化的插件

gradle-packer-plugin

Android多渠道打包工具。

gradle-retrolambda

在java 6 7中使用 lambda表達式的插件。

lint-cleaner-plugin

移除Android中無用資源。

dexcount-gradle-plugin方法數(shù)計算,對于較大應(yīng)用避免方法爆棚很有用。

android-unit-test

添加Android單元測試。

robolectric-gradle-plugin

Robolectric測試輔助工具。

GradleDependenciesHelperPlugin

maven gradle 依賴支持自動補全。idea-markdownmarkdown插件

詳細教程

什么是Android插件開發(fā)

插件化開發(fā)和組件化開發(fā)略有不用,插件化開發(fā)時將整個app拆分成很多模塊,這些模塊包括一個宿主和多個插件,每個模塊都是一個apk(組件化的每個模塊是個lib),最終打包的時候?qū)⑺拗鱝pk和插件apk分開或者聯(lián)合打包。

開源的插件化框架

Qihoo360/DroidPlugin

CtripMobile/DynamicAPK

mmin18/AndroidDynamicLoader

singwhatiwanna/dynamic-load-apk

houkx/android-pluginmgr

bunnyblue/ACDD

wequick/Small

……

目前開源的這幾個框架有宿主和插件分離的也有融合在一起的,每個框架的詳細介紹和demo在github里都可以查看到。插件化demo運行起來比較簡單,但是真正將它用到實際項目中還是要考慮很多小細節(jié)的,目前我也正處于研究階段。


當前文章:android開發(fā)插件,安卓開發(fā)插件
網(wǎng)站路徑:http://www.xueling.net.cn/article/dsdohdh.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 一本大道香蕉大在线中文 | 国产精品一级无遮挡毛片 | 综合激情丁香久久狠狠 | 中国农村熟妇性视频 | 欧美人与牲口杂交在线播放免费 | 少妇大叫太大太粗太爽了A片 | 亚洲第一在线视频 | 中国黄色片视频 | a视频在线| 黄色一级毛毛片 | 免费看的黄色大片 | 九一免费版网站在线?看 | 亚洲国产日韩欧美 | 精品一区精品二区 | 国产一区在线视频 | 久久精品国产亚州Av果冻传媒 | 免费羞羞视频无遮挡噼啪男男 | 国产一区二区三区免费在线观看 | 欧美在线中文字幕 | 在线21国产传媒精品A片 | 国产大片免费在线观看 | 中文字幕在线免费看 | 精品国产乱码久久久久久影片 | 日本欧美一区二区三区在线播 | 国产视热频国只有精品 | 小14萝裸体洗澡视频免费网站 | 国产真实乱子伦视频播放 | 无码色偷偷亚洲国内自拍 | 亚洲特黄 | 少妇人妻无码精品视频 | 一本AV高清一区二区三区 | 久久久精品人妻一区二区三区蜜桃 | 欧美a级v片在线观看 | 18禁裸体女免费观看 | 777欧美奇米网 | 免费女人18毛片a毛片视频 | 国产无色aaa| a级高清免费毛片av在线 | 国产一区二区三区亚洲 | 伊人久久大线影院首页 | 97视频免费观看 |