我有一个库项目,其中包含一个仅用于库类和视图的模块.我一直在互联网上搜索如何在 jCenter 中分发它以用作 gradle 依赖项,但没有任何效果.
虽然这还没有完成,我如何在其他项目中使用这个模块?
PS:我在 Windows 10 上使用 Android Studio.
网上的很多教程和指导已经过时或者很难理解.我自己刚刚学会了如何做到这一点,所以我添加了希望对您来说是一个快速解决方案的内容.它包括以下几点
现在您可能已经建立了一个库.为了这个示例,我在 Android Studio 中创建了一个包含一个 demo-app
应用程序模块和一个 my-library
库模块的新项目.
下面是同时使用 Project 和 Android 视图的样子:
Bintray 托管 jCenter 存储库.
将存储库命名为 maven
.(不过,如果您想将多个库项目组合在一起,您可以将其命名为其他名称.如果这样做,您还需要在下面的 gradle 文件中更改 bintrayRepo
名称.)
选择 Maven 作为存储库类型.
您可以根据需要添加说明.然后点击创建.这就是我们现在在 Bintray 中需要做的所有事情.
我将尽可能地进行剪切和粘贴,但不要忘记编辑必要的部分.您无需对演示应用模块的 build.gradle
文件进行任何操作,只需对项目和库的 gradle 文件进行操作即可.
将 Bintray 和 Mavin 插件添加到您的项目 build.gradle
文件中.这是我的整个文件:
buildscript {存储库{中心()}依赖{类路径'com.android.tools.build:gradle:2.3.2'//添加这些行(将它们更新为最新版本)类路径'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'类路径'com.github.dcendents:android-maven-gradle-plugin:1.5'}}所有项目{存储库{中心()}}任务清理(类型:删除){删除 rootProject.buildDir}
打开终端并转到项目的根文件夹.或者只使用 Android Studio 中的终端.
输入以下命令
./gradlew install./gradlew bintray上传
如果一切设置正确,它应该将您的库上传到 Bintray.如果失败,请谷歌解决方案.(我第一次尝试时必须更新我的 JDK.)
转到您在 Bintray 中的帐户,您应该会看到在您的存储库下输入的库.
在您的 Bintray 库中,有一个 添加到 jCenter 按钮.
点击它并发送您的请求.如果您获得批准(需要一两天时间),那么您的库将成为 jCenter 的一部分,世界各地的开发人员只需在应用程序 build.gradle
build.gradle 中添加一行即可将您的库添加到他们的项目中code> 依赖块.
依赖项{编译 'com.example:my-library:1.0.0'}
恭喜!
您最终会希望将新版本添加到您的 Bintray/jCenter 库中.请参阅此答案了解如何操作.
I have a library project with a module that is just for library classes and views. I've been searching over the internet how to distribute it in jCenter to use as a gradle dependency but nothing works.
While this isn't done yet, how can I use this module in others projects?
PS: I use Android Studio on Windows 10.
Many of the tutorials and directions online are out of date or are very hard to follow. I just learned how to do this myself, so I am adding what will hopefully be a quick solution for you. It includes the following points
By now you probably already have a library set up. For the sake of this example I made a new project with one demo-app
application module and one my-library
library module in Android Studio.
Here is what it looks like using both the Project and Android views:
Bintray hosts the jCenter repositories. Go to Bintray and set up a free account.
After you sign in click Add New Repository
Name the repository maven
. (You can call it something else, though, if you want to group several library projects together. If you do you will also need to change the bintrayRepo
name in the gradle file below.)
Chose Maven as the repository type.
You can add a description if you want. Then click Create. That's all we need to do in Bintray for now.
I'm going to make this as cut-and-paste as possible, but don't forget to edit the necessary parts. You don't need to do anything with the demo app module's build.gradle
file, only the gradle files for the project and the library.
Add the Bintray and Mavin plugins to your project build.gradle
file. Here is my whole file:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
// Add these lines (update them to whatever the newest version is)
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
The newest version for Bintray is here and Maven is here.
Edit everything you need to in the ext
block below.
apply plugin: 'com.android.library'
// change all of these as necessary
ext {
bintrayRepo = 'maven' // this is the same as whatever you called your repository in Bintray
bintrayName = 'my-library' // your bintray package name. I am calling it the same as my library name.
publishedGroupId = 'com.example'
libraryName = 'my-library'
artifact = 'my-library' // I'm calling it the same as my library name
libraryDescription = 'An example library to make your programming life easy'
siteUrl = 'https://github.com/example/my-library'
gitUrl = 'https://github.com/example/my-library.git'
libraryVersion = '1.0.0'
developerId = 'myID' // Maven plugin uses this. I don't know if it needs to be anything special.
developerName = 'My Name'
developerEmail = 'myemail@example.com'
licenseName = 'The MIT License (MIT)'
licenseUrl = 'https://opensource.org/licenses/MIT'
allLicenses = ["MIT"]
}
// This next section is your normal gradle settings
// There is nothing special that you need to change here
// related to Bintray. Keep scrolling down.
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 9
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
}
// Maven section
// You shouldn't need to change anything. It just uses the
// values you set above.
apply plugin: 'com.github.dcendents.android-maven'
group = publishedGroupId // Maven Group ID for the artifact
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
groupId publishedGroupId
artifactId artifact
// Add your description here
name libraryName
description libraryDescription
url siteUrl
// Set your license
licenses {
license {
name licenseName
url licenseUrl
}
}
developers {
developer {
id developerId
name developerName
email developerEmail
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
// Bintray section
// As long as you add bintray.user and bintray.apikey to the local.properties
// file, you shouldn't have to change anything here. The reason you
// don't just write them here is so that they won't be publicly visible
// in GitHub or wherever your source control is.
apply plugin: 'com.jfrog.bintray'
version = libraryVersion
if (project.hasProperty("android")) { // Android libraries
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
} else { // Java libraries
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = bintrayRepo
name = bintrayName
desc = libraryDescription
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = allLicenses
publish = true
publicDownloadNumbers = true
version {
desc = libraryDescription
gpg {
// optional GPG encryption. Default is false.
sign = false
//passphrase = properties.getProperty("bintray.gpg.password")
}
}
}
}
The library build.gradle
file above referenced some values in the local.properties
file. We need to add those now. This file is located in the root of your project. It should be included in .gitignore
. (If it isn't then add it.) The point of putting your username, api key, and encryption password here is so that it won't be publicly visible in version control.
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/home/yonghu/Android/Sdk
# Add these lines (but change the values according to your situation)
bintray.user=myusername
bintray.apikey=1f2598794a54553ba68859bb0bf4c31ff6e71746
There is a warning about not modifying this file but it seems to work well anyway. Here is how you get the values:
bintray.user
: This is your Bintray username.bintray.apikey
: Go to Edit Profile in the Bintray menu and choose API Key. Copy it from here.Open a terminal and go to your project's root folder. Or just use the terminal in Android Studio.
Enter the following commands
./gradlew install
./gradlew bintrayUpload
If everything is set up right it should upload your library to Bintray. If it fails then Google the solution. (I had to update my JDK the first time I tried.)
Go to your account in Bintray and you should see the library entered under your repository.
In your library in Bintray there is an Add to jCenter button.
Click it and send your request. If you are approved (which takes a day or two), then your library will be a part of jCenter and developers around the world can add your library to their projects simply by adding one line to the app build.gradle
dependencies block.
dependencies {
compile 'com.example:my-library:1.0.0'
}
Congratulations!
You will eventually want to add a new version to your Bintray/jCenter library. See this answer to directions on how to do it.
这篇关于在 jCenter 中分发 Android 库以在 gradle 中使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!