我正在使用gradle构建的应用程序中导入一个android库,如下所示:
dependencies {
compile 'com.example:great-lib:0.1-SNAPSHOT'
}
Run Code Online (Sandbox Code Playgroud)
此库仅包含要在webview中使用的资源,js,css和图像,其布局如下:
assets/
|-> great.css
|-> great.min.js
|-> great.min.js.map
|-> js/
| |-> plop.js
| |-> foo.js
| ...
|-> img/
| ...
Run Code Online (Sandbox Code Playgroud)
该js文件夹包含源文件(与源映射一起使用).我想包含它和.map调试版本的文件,并且在发布版本中只有缩小的js,但我找不到这样做的方法.
到目前为止,我已经尝试过:
android {
// this doesn't exclude anything
packageOptions {
exclude 'assets/js'
}
buildTypes {
release {
// this does exclude the js folder, but in both release and debug
aaptOptions {
ignoreAssetsPattern "!js"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法是否有可能实现,如果是,如何?
(我也想过发布两个版本的库(great-lib和great-lib-debug),并且依赖于debugCompile和releaseCompile …
我创建了一个aar,并将其作为模块添加到我的项目中.在这个模块中,我有一个我想要运行的HelloWorldActivity.
我的模块清单看起来像这样.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ir.sibvas.testlibary1.HelloWorldActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="ir.sibvas.testlibary1.HelloWorldActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
现在我可以使用此代码从我的项目开始此活动
Intent intent = new Intent("ir.sibvas.testlibary1.HelloWorldActivity");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但正如你可以看到这个代码是隐含的,隐式调用的问题是,如果我在多个应用程序中使用此模块,两者都安装在用户设备上,它将向用户显示应用程序选择器对话框.那么如何才能使这个调用显式化,阻止用户切换应用?
此代码将无法运行,因为HelloWorldActivity与调用活动不在同一个包中
Intent intent = new Intent(this, HelloWorldActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我真的不想为每个使用它的项目更改我的模块.
我想在我的java程序中使用这个android依赖项:
http://jcenter.bintray.com/com/o3dr/android/dronekit-android/2.9.0/
Run Code Online (Sandbox Code Playgroud)
所以我将所有插件和存储库添加到我的maven pom文件中:
<repositories>
<repository>
<id>central</id>
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
<!--<snapshots>-->
<!--<enabled>false</enabled>-->
<!--</snapshots>-->
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<!--<snapshots>-->
<!--<enabled>false</enabled>-->
<!--</snapshots>-->
<id>central</id>
<name>bintray-plugins</name>
<url>http://jcenter.bintray.com</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>4.1.0</version>
<extensions>true</extensions>
<configuration>
<sign>
<debug>false</debug>
</sign>
</configuration>
</plugin>
...
Run Code Online (Sandbox Code Playgroud)
然后我将依赖项添加到同一个文件中:
<dependency>
<groupId>com.o3dr.android</groupId>
<artifactId>dronekit-android</artifactId>
<version>2.9.0</version>
<type>aar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但没有任何反应,maven忽略它就好像它不存在,如果我在scala文件中导入它的主包并用它构建它mvn clear install -U,我得到这个错误:
[ERROR] /home/peng/git-drone/dronespike/src/main/scala/Main.scala:1:object o3dr不是包com
[ERROR] import com.o3dr.android._
[ERROR] ^的成员
问题:我该怎么做才能解决这个问题?
我创建了一个安卓库,它包含一个用于打开相机意图的活动类,该库可以完美地用于调用活动显示在屏幕上的部分,并且应用程序崩溃时抛出以下错误
Suppressed: java.lang.ClassNotFoundException: com.me.scanner.ScannerViewActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 14 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
Run Code Online (Sandbox Code Playgroud)
以下是我build.gradle将使用此库的其他项目的文件
repositories {
flatDir {
dirs 'libs'
}
}
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.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.me.app:gpio_lib@aar'
compile ('com.me.app:scanner@aar'){ transitive = true; }
testCompile 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)
请注意:
这个库非常适合作为模块项目,
compile project(':scannercontrol')
Run Code Online (Sandbox Code Playgroud)
但不是aar在项目中使用它时
我有没有尝试 …
当我尝试运行该应用程序时,我收到此错误 Task 'assembleAarRelease' not found in root project 'flutter_plugin_android_lifecycle'。如何解决这个问题?
我正在尝试使用具有远程依赖关系的gradle构建aar文件.下面是一个示例构建脚本.如您所见,我有两个依赖项.我遇到的问题是当我发布时,aar文件不包含远程依赖项,所以当我在其他项目中包含aar文件时,我得到NoClassDefFound错误.
我发现如果我将jar从我当地的maven repo复制到我项目中的libs文件夹,那么jar确实会包含在发布版本中.如何在aar文件中包含远程依赖项?我还在其他地方读到,这样运送依赖关系是不好的做法,所以如果有更好的方法来做我想做的事情,我就是为了它.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral()
mavenLocal()
}
android {
... omitted for brevity
}
dependencies {
compile 'com.somepackage:someartifact:1.0'
compile 'com.anotherpackage:artifact:2.0'
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Android Studio和gradle为库Android项目创建AAR文件.
我想从此存档中排除特定的文件夹和文件,但我找不到有效的解决方案.
该项目有两种口味.
app/
|--libs/
|--src/
|--flavour1/
| |--java/
| |--a1/
| | |--class_File1.java
|--flavour2/
| |--java/
| |--a1/
| | |--class_File1.java
|--main/
|--java/
| |--...
|--res/
| |--raw/
| | |--comments.txt
| |--...
|--AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)
我使用像这样的build.gradle文件
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 10
targetSdkVersion 21
}
packagingOptions {
exclude 'assets'
exclude '**/comments.txt'
}
sourceSets {
flavour1 {
resources {
exclude '**/comments.txt'
}
}
flavour2 {
}
}
buildTypes {
release {
minifyEnabled true …Run Code Online (Sandbox Code Playgroud) 我创建了一个Android库(称为MyLib中),这取决于其他图书馆可在Maven的回购协议(如GSON,翻新等).
MyLib
|
|-- Retrofit
|-- Gson
|-- ...
Run Code Online (Sandbox Code Playgroud)
MyLib打包到一个aar文件中.
目标是发布一个aar库,该库可以包含在Android应用程序(称为MyApp)中,而无需第二次指定MyLib使用的依赖项.
MyApp
|
|-- MyLib
| |-- Retrofit
| |-- gson
| |-- ...
Run Code Online (Sandbox Code Playgroud)
这是MyLib的build.gradle文件
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.google.code.gson:gson:2.3.1'
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想建立和运行MyApp的不依赖问题,我不得不使用以下的build.gradle MyApp的(如果我不指定改装和GSON作为DEPS,运行时异常被抛出,因为DEPS不可用) .
dependencies {
compile('MyLib@aar')
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.google.code.gson:gson:2.3.1'
}
Run Code Online (Sandbox Code Playgroud)
我不想在MyApp中指定MyLib中使用的依赖项,我应该如何编写build.gradle文件?
Thansk提前
本指南讨论flutter和原生android之间对话的方法通道。
https://flutter.dev/docs/development/platform-integration/platform-channels
我已经为我的 flutter 模块生成了“aar”文件,并将该 aar 文件包含在我的本机 android 应用程序中。现在,当我单击 Android 应用程序中的按钮时,我将通过 Android 中的 FlutterActivity 类启动我的 flutter 模块。
现在我的问题是,如何在本机 android 代码和生成的 aar 代码之间进一步通信?
如何编写我的 flutter 模块,以便当我生成“aar”文件并包含在我的 android 应用程序中时,我能够在它们之间建立通信?
甚至可以使用Kotlin编写一个库吗?
我看到的问题是,这将取决于specyfic版本kotlin-stdlib和kotlin-runtime并迫使图书馆的用户使用相同的版本.
我正在考虑使用jarjar重新包装那些但是那么,如何将它们包括在胖子型分发中?在解压缩的内部我看到/libs目录 - 有没有办法使用它?