我使用 Android Studio (1.2.2)。我构建了一个 Android 模块库,其中声明了一个接口:
public interface myInterface {
void onSuccess(String returnedId);
void onFailure(Exception e);
}
Run Code Online (Sandbox Code Playgroud)
我编译项目并从build/outputs/aar/目录中获取 .aar 文件。然后我使用Import .JAR 或 .AAR package将 .aar 导入到项目中。我将其设置为模块依赖项并将接口导入到我想要使用它的类中。
问题是,当我想使用导入的接口时,自动完成功能不会使用我在构建库时设置的描述性名称来完成接口变量。转到导入的.aar文件中的接口声明,我发现:
public interface myInterface {
void onSuccess(String var1);
void onFailure(Exception var1);
}
Run Code Online (Sandbox Code Playgroud)
我想要的是:
void onSuccess(String returnedId);
我得到什么:
公共无效onSuccess(字符串s){
我正在为供应商制作一个库项目,它需要 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) 我正在开发某些 SDK 来为其他 Android 应用程序提供一些功能。我的 sdk 项目依赖项的一个库项目有一些 .so lib 文件。当我用gradle将我的sdk项目组装成aar包时,我发现不包含.so文件。如何将.so lib文件组装成aar包?
这是sdk项目的build.gradle:
apply plugin: 'com.android.library'
android {
signingConfigs {
debug {
keyAlias 'debug.keystore'
keyPassword 'ssdebug'
storeFile file('release-tools/debug.keystore')
storePassword 'ssdebug'
}
release {
keyAlias 'release.keystore'
keyPassword 'dddd'
storeFile file('../seedstore/release.keystore')
storePassword 'dddd'
}
}
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
signingConfig signingConfigs.release
}
sourceSets {
main {
jniLibs.srcDir file('jni/')
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
} …Run Code Online (Sandbox Code Playgroud) 我正在构建一个用于音乐流媒体的 Android 库。它有ExoPlayer作为依赖项(顺便说一句,这是一个优秀的库!)。
我们将此库用于我们现在也在 Xamarin 中开发的另一个项目。目前,我们需要添加两个库(我的 .aar 和 ExoPlayer 的 .jar)。说实话,这有点烦人,我很想把我的 .aar 放进去,然后就可以了。
那么两个问题:
这是我当前的 gradle 文件。不过,没什么令人兴奋的东西。但是当我将初始应用程序转换为库时,也许有一些奇怪的事情,谁知道呢......
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile ('com.google.android.exoplayer:exoplayer:r1.5.6')
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
compile 'com.android.support:appcompat-v7:23.2.0'
}
Run Code Online (Sandbox Code Playgroud) 如何在IntelliJ IDEA中导入aar格式的sdk?或者IntelliJ IDEA只支持jar文件?
是否可以从以下 gradle 链接或任何 gradle 链接获取 .AAR 文件?
compile('com.mikepenz:materialdrawer:5.9.0@aar') {
transitive = true
}
Run Code Online (Sandbox Code Playgroud) 我正在从我的图书馆项目创建 aar。但如果我将其添加到另一个项目中,它将被视为“未指定”。(name="MyLibrary-unspecified") 如果我单击 .aar,它也会显示“未知(版本未知)”。如何正确设置这个?(我将文件命名为 MyLibrary-1.1.0.aar 但这没有帮助)
所以我构建了一个 Android aar 库,其中包含一个本机库(libnative-lib.so)。出于向后兼容性的考虑,它仅针对armeabi 和x86 架构构建。
现在,我放置 aar 文件并在我的“客户端”应用程序中使用它,我可以清楚地看到 libnative-lib.so 位于 aar 的 jni/armeabi 和 jni/x86 文件夹下。
但应用程序崩溃并显示以下消息:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]] couldn't find "libnative-lib.so"
Run Code Online (Sandbox Code Playgroud)
这看起来客户端应用程序无法从 aar 找到 nativelib。有什么建议么?
在我的 Android 项目中,我有 2 个库都依赖于 WebRTC。这两个库都强制包含 WebRTC。这两个库都不会重命名 WebRTC 库(尽管有自定义)。两位开发人员都坚持认为必须以这种方式强制包含 WebRTC(我对此非常怀疑)。
如何解决这种依赖冲突?
我已经尝试过如下所述的解决方案: https:
//medium.com/mindorks/avoiding-conflicts-in-android-gradle-dependency-28e4200ca235
但这特别需要依赖项是可传递的。在我的例子中,哪些硬包含库不是。如果我调用gradlew dependenciesWebRTC 甚至不会出现在该列表中。但在编译时,我Multiple dex files define Lorg/webrtc/VideoFileRenderer$2;每次编译时都会收到错误,例如“VideoFileRenderer”与 org.webrtc 是不同的文件。清理构建树或缓存没有解决任何问题。
有问题的图书馆是:
这两个库在运行时永远不会同时使用。我只需要在编译时包含两者。此外,每个用户在注册时仅进行一次视频通话以证明自己的身份。
库模块不能包含原始资源
我创建了一个示例 android 库模块,其中包含资产(不在应用程序模块中),然后生成 aar 文件。我分析了生成的 aar 文件,瞧,assets/ 文件夹仍然存在,所有文件都完好无损。
那么,到底是允许还是不允许呢?