如何从具有gradle依赖性的代码创建Android库?

13 java android gradle maven

我正在创建一个基于以下组件的依赖项的Android库.

  1. 我的图书馆代码
  2. 布局和资源文件
  3. Gradle对第三方的依赖.

首先,我想到为我的库创建.jar文件,但后来我发现laulyoit和资源文件不是用jar编译的.然后我决定创建AAR文件.请建议这个是正确的移动还是有其他选择?

现在我遇到了gradle依赖的主要问题.我们正在创建一个付费图书馆,使用Google等仅通过Gradle提供的第三方.现在,因为我正在创建一个AAR文件,所以没有Manifest.xml和Gradle文件,如何将第三方与我自己的代码集成.我们有严格的指示,我们不能告诉图书馆的用户包括要包括的第三方.简单来说,我们不能让用户知道我们的库正在使用哪种第三方.那么有什么办法可以创建一个AAR文件,它也有预编译的gradle依赖项,而不会向用户透露我们正在使用的服务?

更新1

这是我的库的build.gradle

apply plugin: 'com.android.library'

android {
   compileSdkVersion 25
   buildToolsVersion "25.0.2"
   defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner         "android.support.test.runner.AndroidJUnitRunner"
}
   dexOptions {
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
   }
   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:+'

   compile 'com.google.android.gms:play-services-vision:10.2.1'

   testCompile 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)

在我将.aar文件移动到本地maven之后,然后使用我的应用程序Project中的输出文件创建.这是同样的gradle.

apply plugin: 'com.android.application'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
    applicationId "com.jarvis.myapplication"
    minSdkVersion 15
    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.company:mylibrary:1.0@aar')
        {
            transitive = true
        }
    compile 'com.android.support:appcompat-v7:25.3.0'
    testCompile 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)

Gri*_*ram 7

如果您创建一个.aar项目有一个清单文件,它会被用在编译的应用程序清单合并.一切正常.您可以在.aar项目中使用任何gradle依赖项,甚至是proguard模糊处理和签名.

要在主应用程序中编译.aar库,请将它放在dependenciesbuild.grade文件中:

dependencies {
    compile(name:'your_lib_name', ext:'aar')
}
Run Code Online (Sandbox Code Playgroud)

您必须将.aar文件复制到文件libs夹中的app文件夹.

但有一件事是清楚的:如果有人使用你的.aar文件,他或她可以随时查看android studio中的合并清单文件,你无法隐藏你的依赖关系.至少,据我所知.Android受开源库(甚至通过maven)的强烈驱动,在大多数情况下,您甚至必须包含已使用外部库的许可证,用户可以将其看作应用程序中的菜单项或链接.否则您在某些情况下违反许可证甚至可能违反使用条款.你可能不会隐藏它们.