相关疑难解决方法(0)

图书馆?静态的?动态?还是框架?项目在另一个项目内

我有一个现有的iOS应用程序,并希望添加一大块代码,我一直在开发另一个项目,以方便测试.新的块基本上处理将图像保存到各种共享服务等.因为共享代码需要大量的测试和未来的更新,我想知道将代码块合并到我现有的应用程序中的最佳方法是什么.

我不知道它应该是静态库,动态库还是框架,老实说,我不确定区别是什么,或者我应该如何去做它并在Xcode中设置它.

我所知道的是,我需要/想要为共享代码保留单独的测试和更新应用程序,并让主应用程序使用它.

如果你还不能说,我不是一个git wiz.我只是一个简单的单人开发人员.

任何帮助或方向将不胜感激.谢谢!

xcode frameworks static-libraries ios

132
推荐指数
2
解决办法
5万
查看次数

具有捆绑依赖性的库(fat aar)

我们建立了一个我们分发给客户的图书馆.我们分发原始的aar文件供他们使用.我们还使用GitHub的原始访问API来提供Maven存储库.

现在为了保持整洁,我们将库分成几个模块:

include ':library'
include ':geohash'
include ':networkstate'
include ':okvolley'
include ':volley'
Run Code Online (Sandbox Code Playgroud)

library是一个Android库,所以是volleyokvolleynetworkstate.

现在,当我发布时library,依赖树看起来像这样:

\--- com.sensorberg.sdk:sensorberg-sdk:0.10.0-SNAPSHOT
 +--- com.squareup.okhttp:okhttp-urlconnection:2.2.0
 |    \--- com.squareup.okhttp:okhttp:2.2.0
 |         \--- com.squareup.okio:okio:1.2.0
 +--- com.google.code.gson:gson:2.3.1 
 +--- android-sdk:okvolley:unspecified
 |    +--- com.squareup.okhttp:okhttp-urlconnection:2.2.0 (*)
 |    +--- com.google.code.gson:gson:2.3.1
 |    +--- android-near-gradle:volley:unspecified
 |    \--- com.squareup.okhttp:okhttp:2.2.0 (*)
 +--- android-sdk:networkstate:unspecified
 +--- com.squareup.okhttp:okhttp:2.2.0 (*)
 +--- android-sdk:volley:unspecified
 \--- com.loopj.android:android-async-http:1.4.5
Run Code Online (Sandbox Code Playgroud)

正如您所见,android-sdk:networkstate:unspecifiedandroid-sdk:okvolley:unspecified显示在外部依赖项列表中.

我想library用捆绑的本地模块创建我的aar.它应该做一个本地清单合并和远jar ...并合并所有模块的依赖性.只显示外部模块.

我确实尝试从build/output/aar相应模块的文件夹中引用本地aar文件,但这似乎也行不通.它仍然似乎用他们的名字引用本地模块而不是合并jar的清单......

有人做过这样的事吗?在Android之外,这将被称为fatjar,并且有像musketyr/gradle-fatjar-plugin这样的插件,可以用Gradle生成一个胖子.

我在我的本地模块上试过这个

if (project.ext.libraryBuild …
Run Code Online (Sandbox Code Playgroud)

android gradle android-library

23
推荐指数
2
解决办法
1万
查看次数

如何在另一个库中包含Android库模块?

我正在构建一个打包为aar并分发给第三方开发人员的Android库.

结构非常简单:

项目--- libraryA --- libraryB

libraryA需要libraryB,这就是为什么在它的gradle文件中有这个:

compile project(':libraryB')
Run Code Online (Sandbox Code Playgroud)

而settings.gradle有

include ':libraryB', ':libraryA'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将项目构建为aar,它只包含libraryA.我错过了什么?

我阅读了对此的回答:Android Studio如何从多个库项目中打包单个AAR?

这还不可能吗?我认为将代码拆分成多个模块并不是一种不好的做法?

android gradle android-library android-gradle-plugin

13
推荐指数
2
解决办法
3180
查看次数

如何发布另一个Android库项目依赖的AAR?

这是我的开发项目结构:

projectFolder
  |
  +--App
  |
  +--MyLib
  |
  +--Libraries
      |
      +--LibA

MyLib依赖于LibA,我将MyLib打包为AAR并将其发布到Maven 仓库,但当我将MyLib作为远程aar依赖项包含在另一个项目(TestProj)中时,我得到了构建错误(无法解析LibA的依赖关系,LibA不包含在MyLib的发布中),这是TestProj的 app文件夹中的build.gradel :

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile ('xxx.xxxxxx:yyyyy:1.0-SNAPSHOT@aar'){
      transitive = true
  }
}
Run Code Online (Sandbox Code Playgroud)

这是MyLib的build.gradle :

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile project(':Libraries:LibA')
}
Run Code Online (Sandbox Code Playgroud)

我如何能释放MyLib中力霸已经打包在AAR?

android gradle maven aar

9
推荐指数
1
解决办法
4725
查看次数

创建一个依赖于多个AAR的AAR

我正在努力构建一个可以在其他应用程序中使用的SDK.

我的项目结构如下:

ProjectFolder
  |
  +--AndroidLibs
  |      |
  |      +--UI (android library - AAR)
  |      |
  |      +--Protocol (android library - AAR)
  |      |
  |      +--infra (android library - AAR)
  |
  +--SDK(depends on UI, Protocol and Infra) 
  |
  +--APP(depends on SDK)
Run Code Online (Sandbox Code Playgroud)

如您所见,我们有3个不同的库,每个库都是我们系统中的模块(infra,ui和protocol).他们每个人都在创建一个AAR.

我们的SDK是一个包装器,包含对较低层的一些API调用.

我们想要创建一个依赖于所有其他AAR的AAR,但是出于某种原因,当我们尝试运行它时,它说他找不到某些类的源代码.

我发现了一些与此问题相关的问题,但它们没有奏效.也尝试使用transitive依赖项,但底线是相同的 - 找不到源代码.

  1. android-studio-how-to-package-one-aar-from-multi-library-projects:一个答案就是没有解决方案(Google员工).
  2. create-an-aar-with-multiple-aars-jars:使用transitive依赖项.
  3. 创建Mojo以创建具有所有"aar"依赖关系的AAR

我们还能做些什么吗?

android module gradle android-gradle-plugin aar

7
推荐指数
1
解决办法
1890
查看次数

如何制作单个AAR文件,有一些其他AAR文件

你能帮我理解构建android库的一般概念,并在用户的应用程序中使用它.

所以,有以下情况:

在android studio中有以下模块:
核心
数据
绘图

并且有一个模块
应用程序
依赖于上述模块.

app.gradle

dependencies {
    compile project(':core')
    compile project(':data')
    compile project(':drawing')
}
Run Code Online (Sandbox Code Playgroud)

所以我可以从Android Studio运行该应用程序.

但我希望有类似AAR文件的东西,并将其包含在任何应用程序中,以便能够再次使用它而无需创建相同的模块.

我对Gradle不是很熟悉,所以我不确定是否可能以及如何做到这一点.

android gradle aar

6
推荐指数
1
解决办法
2743
查看次数

使用Gradle从多个模块创建单个AAR文件

像许多其他人一样,我试图从我的多模块Android项目生成一个AAR文件.

根据这篇文章,由于各种限制(res和依赖关系管理,清单合并,......),Android团队目前不支持它.

我想提出适合我需求的自己的解决方案.我知道我没有重复的资源,外部依赖项(如支持库)是由使用我的lib的人提供的.

我的结构类似于:

/root
|- lib1
|- lib2
|- lib3
Run Code Online (Sandbox Code Playgroud)

为了实现我的目标,我创建了另一个名为的库模块,distribute它将包含所有其他模块.然后我可以共享生成的distribute.aar文件.

/root
|- lib1
|- lib2
|- lib3
|- distribute
Run Code Online (Sandbox Code Playgroud)

这是模块的build.gradle文件distribute:

apply from: '../common.gradle' // This simply configure properties shared accross all modules
apply plugin: 'com.android.library'

def allModules = rootProject.allprojects.collect { it.name } - [rootProject.name, name]
def whiteLabelDependencies = [
        whiteLabel1: allModules - ['lib2'],
        whiteLabel2: allModules,
]

android {
    def buildTypeNames = buildTypes.collect { it.name }
    def whiteLabelTypes = …
Run Code Online (Sandbox Code Playgroud)

android gradle android-library android-gradle-plugin

6
推荐指数
0
解决办法
935
查看次数

如何导出AAR包括其依赖项?

我有一个使用library.aar和的Android Studio库项目library.jar.当我出口它mylib.aar,并使用这个新的AAR到不同的应用程序/项目,它无法找到在定义的类library.aarlibrary.jar.

build.gradle看起来像这样:

apply plugin: 'com.android.library'
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':library_dot_aar')
    compile project(':library_dot_jar')
}
Run Code Online (Sandbox Code Playgroud)

我在Android Studio中导入了AAR和JAR文件New -> Module -> Import .JAR or .AAR Package,并将它们作为依赖项添加到Project Structure -> Module Settings -> Dependencies -> Add Module Dependencies.

当我解压缩mylib.aar它只有25KB(考虑library.aar超过300KB,我假设mylib.aar的大小将在相同的范围内)并且包含的​​依赖项不包括在其中.如何导出包含其内部所有依赖项的AAR?

android android-studio

5
推荐指数
1
解决办法
2576
查看次数

将gradle依赖添加到库aar包中

我正在为供应商制作一个库项目,它需要 Android Volley 作为依赖项。我已使用此在 Android Studio 中创建 aar 文件来创建 .aar 文件并将其包含在测试项目中,我正在使用此使用“flatDirs”将本地 .aar 文件添加到 Gradle 构建不起作用。该库链接良好,项目编译没有错误。但在运行时测试应用程序崩溃并表示找不到 Volley

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/volley/toolbox/Volley;
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.volley.toolbox.Volley" on path: DexPathList[[zip file "/data/app/in.gridsync.acttest-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
Run Code Online (Sandbox Code Playgroud)

我的库项目的 Gradle 文件是这样的

    apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin aar

5
推荐指数
1
解决办法
1856
查看次数