android - 将 android 库发布到亚马逊云程序

标签 android amazon-s3 aar amazon-cloudwatch

我已经下载了将我的 android studio 2.2.2 库项目发布到亚马逊云的 android aws 文档。但是,这些步骤不适合我。

任何人都可以建议任何其他方法将 Android studio 库项目上传到亚马逊云并为 Jcenter 和 Maven 等依赖项制作 url。

最佳答案

托管私有(private) Maven 存储库的简单解决方案,无需站起来管理服务器:

为了在 Amazon S3 上托管您的 Assets ,您首先必须设置一个经过身份验证的存储桶作为您的存储库。这超出了本文的范围,但亚马逊有一些优秀的 documentation 详细说明了如何做到这一点。

创建存储桶后,您需要添加存储桶策略以确保您的身份验证用户有权访问存储桶中创建的所有文件。

{
  "Version": "2012-10-17",
  "Id": "Policy1428433847297",
  "Statement": [
    {
      "Sid": "Stmt1428433844452",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1234567890:user/maven-user"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::pixite-maven"
    },
    {
      "Sid": "Stmt1428433844452",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1234567890:user/maven-user"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::pixite-maven/*"
    }
  ]
}

请注意,我的组有权列出 pixite-maven 存储桶,也有权在存储桶的任何子目录中获取和放置对象。您可以根据亚马逊的文档对此进行任何限制。

如果您在单个存储桶中同时托管快照和发布(就像我一样),您可能希望将这些目录添加到存储桶的根目录中。另一种选择是拥有两个可以独立管理的存储桶,一个用于快照,一个用于发布。

下一步是确保您的项目使用的是 gradle 2.4。这可以通过编辑您的 gradle-wrapper.properties 文件来完成,或者只需将以下代码 fragment 添加到您的根 build.gradle 文件,然后运行 ​​./gradlew wrapper。

task wrapper(type: Wrapper) {
    gradleVersion = '2.4' }

现在,无论您通常设置需要访问的存储库(我在我的根构建脚本中使用 allprojects {} block ),只需将您的 Amazon S3 存储桶添加为 Maven 存储库即可。

 repositories {
        maven {
            url "s3://pixite-maven/releases"
            credentials(AwsCredentials) {
                accessKey AWS_ACCESS_KEY
                secretKey AWS_SECRET_KEY
            }
        }
        maven {
            url "s3://pixite-maven/snapshots"
            credentials(AwsCredentials) {
                accessKey AWS_ACCESS_KEY
                secretKey AWS_SECRET_KEY
            }
        }



  mavenLocal()
    jcenter()
}

请注意存储库的 url 是 s3://[bucket name]/[path]。此外,由于这是一个私有(private)存储库,我将我的 AwsCredentials 包含在 maven block 中。虽然您可以将实际的 AWS_ACCESS_KEYAWS_SECRET_KEY 直接放在您的构建文件中,但不要这样做!你的构建文件不应该包含凭据,因为那样你就无法真正管理访问。这些值正是我的构建文件中的内容,允许它从我的主目录中的用户特定 gradle.properties 文件中读取。这是我在 ~/.gradle/gradle.properties:

中设置实际值的地方
 AWS_ACCESS_KEY=my_aws_access_key
AWS_SECRET_KEY=my_super_secret_key

这就是在 Amazon S3 上托管您的依赖项所需的全部内容,为您提供了一个经济实惠、访问受控的内部 maven 托管选项,而无需管理开销。

注意:不是开源库的解决方案

BinTray (jcenter) 和 Maven Central 是发布开源代码的地方。这允许您的库的用户轻松访问,而无需在他们的项目中添加自定义存储库。只有当您需要经过身份验证的存储库,或者如果您需要在没有源代码(ala Fabric)的情况下分发您的库时,这才是解决方案。

有关此的更多信息,请查看以下链接:

An S3 repository can be configured to authenticate using AWS's EC2 instance metadata.

S3 Repositories can be configured with credentials providers

Setting Up & Publishing Private Amazon S3 Maven Repository Android Library

快乐编码!!!干杯!!!

关于android - 将 android 库发布到亚马逊云程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40904238/

相关文章:

typescript - CDK - S3 通知导致循环引用错误

laravel - 如何使用 flysystem 将文件从一个存储桶传输到另一个存储桶?

android - RenderScript:不在 aar 中提供 .so

android - 如何将拍摄的照片保存到特定文件夹?

mysql - 使用 Amazon Web Services(EC2 等)托管 CakePHP 应用程序?

java - 使用 gradle 复制构建 Artifact

android - 如何在github和gitlab上托管Maven?

android - 4.4以下沉浸式全屏

java - 如何使用 Intellij 将 Android Gradle 项目从 Windows 导入 Linux,而不会出现 keystore 问题

android - 如何知道 ESP8266 是否在 Android 应用程序的 Firebase 中连接/断开连接?