前言
平時(shí)開發(fā)中,我們經(jīng)常會(huì)使用到通過(guò) gradle 依賴三方的工具鲫惶。例如我們常用的 okHttp 、 EventBus 等框架实抡。那么這些代碼是如何部署到遠(yuǎn)程并且供我們使用的呢欠母?接下來(lái)就來(lái)看一下如何去實(shí)現(xiàn)。
maven
maven 其實(shí)就是為我們提供了進(jìn)行托管我們代碼的地址吆寨,我們可以相關(guān)代碼進(jìn)行上傳到 maven赏淌,同時(shí)其他人如果覺(jué)得你寫的比較好就可以通過(guò)依賴獲取相關(guān)代碼。maven 就類似于一個(gè) git 或者 svn 的倉(cāng)庫(kù)啄清。
把自己的項(xiàng)目部署到 maven 中
上面項(xiàng)目中六水,我們有一個(gè) jnilib 的 library 俺孙。這個(gè)項(xiàng)目是我們創(chuàng)建的為了進(jìn)行 jni 調(diào)用的一個(gè)示例 library 。接下來(lái)我們?nèi)グ堰@個(gè) library 部署到 maven 中掷贾,并供其它項(xiàng)目依賴使用睛榄。
1 首先需要在 jnilib 的 build.gradle 中進(jìn)行一些配置:
//上傳的maven庫(kù)中
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
def mavenDirPath = file('D:\\mavendir') // 本地存放目錄(自行選擇),可放在gradle.properties文件中引用
repository(url:"file://${mavenDirPath.absolutePath}") // 必須雙引號(hào)想帅,單引號(hào)不會(huì)轉(zhuǎn)義$
pom.project {
groupId "com.harusty.maven" // 可以隨意取场靴,一般取包名
artifactId "jnisay" // 可以隨意取,一般取庫(kù)的名字
version "1.0.0" // 版本號(hào)
}
}
}
apply plugin: 'maven' 應(yīng)用 maven 的插件港准。
可以看到我們配置了本地的 maven 緩存目錄旨剥,以及庫(kù)的包名、庫(kù)名浅缸、版本號(hào)的信息轨帜,根據(jù)自己的習(xí)慣進(jìn)行命名。
2 生成aar文件
定義好了相關(guān)配置信息衩椒,就可以去編譯進(jìn)行刷新生成 jnilib 的相關(guān)文件:
點(diǎn)擊Run "MyApplication ..."蚌父,或者我們?nèi)?zhí)行g(shù)radlew :jinlib:uploadArchives命令
此時(shí)會(huì)在本地目錄中生成相關(guān)文件,我這里定義的本地D盤烟具,去看一看:
我這里因?yàn)橹案倪^(guò)版本號(hào)為1.0.1梢什,所以會(huì)生成兩個(gè)文件夾。庫(kù)的升級(jí)也就是這樣去做的朝聋。
這樣嗡午,我們已經(jīng)在本地生成了文件,接下來(lái)就只需要上傳到遠(yuǎn)程就可以了冀痕。
3 上傳本地文件到遠(yuǎn)程
上傳到github的地址:
拿到地址信息荔睹,https://github.com/harusty/jnisay/
4 本地配置信息,下載部署在 git 上的文件:
github 的地址信息
https://github.com/harusty/jnisay/
進(jìn)行修改:
https://raw.githubusercontent.com/harusty/jnisay/master
即 github.com ——> raw.githubusercontent.com
在末尾追加 master 分支
根目錄下 build.gradle 進(jìn)行地址信息配置:
allprojects {
repositories {
google()
jcenter()
maven{
url "https://raw.githubusercontent.com/harusty/jnisay/master"
}
}
}
在需要使用該庫(kù)的build.gradle文件的dependencies添加依賴:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.harusty.maven:jnisay:1.0.0'
// compile project(path: ':jnilib')
}
上面我們同時(shí)屏蔽了本地對(duì) library 的依賴言蛇。
5 刷新 build.gradle 文件僻他,下載對(duì)應(yīng)部署在 git 上的 library 文件。
成功下載后我們可以在 External Libraries 中看到上述的 aar 文件腊尚。
注意:
在下載過(guò)程中我們有可能連接不上 raw.githubusercontent.com吨拗,導(dǎo)致下載 aar 文件失敗⌒龀猓可以通過(guò)修改 Host 文件解決:
通過(guò)IPAddress.com首頁(yè),輸入raw.githubusercontent.com查詢到真實(shí)IP地址
199.232.28.133
C:\Windows\System32\drivers\etc
hosts文件
添加 以下內(nèi)容并保存即可恢復(fù)
199.232.28.133 raw.githubusercontent.com
6 運(yùn)行文件劝篷,調(diào)用 jnilibs 里的方法。
public class JNIUtils {
static {
System.loadLibrary("demo");
}
public static native String sayHelloFromJNI();
}
這里用的 jni 民宿,native 層會(huì)返回一個(gè)字符串娇妓。關(guān)于 jni 相關(guān)可查看
jni 調(diào)用的相關(guān)文章,這里知道會(huì)返回一個(gè)字符串活鹰。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv = findViewById(R.id.jni_click);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(JNIUtils.sayHelloFromJNI());
}
});
}
}
功能可正常調(diào)用即部署成功哈恰。如果本地升級(jí)了只估,同時(shí)升級(jí) maven 配置的版本號(hào)即可,并進(jìn)行上傳至 git 着绷。
uploadArchives {
repositories.mavenDeployer {
def mavenDirPath = file('D:\\mavendir') // 本地存放目錄(自行選擇)蛔钙,可放在gradle.properties文件中引用
repository(url:"file://${mavenDirPath.absolutePath}") // 必須雙引號(hào),單引號(hào)不會(huì)轉(zhuǎn)義$
pom.project {
groupId "com.harusty.maven" // 可以隨意取蓬戚,一般取包名
artifactId "jnisay" // 可以隨意取夸楣,一般取庫(kù)的名字
version "1.0.3" //升級(jí) 版本號(hào)
}
}
}
升級(jí)到 1.0.3 版本。