我有一个相当最新版本的android studio,我在一个项目下创建了一个模块,基本上应该是一个库,当我构建它时,它会创建一个".aar"文件,我想要的是.jar文件,因为这个库也应该与eclipse一起使用.
该库还包含活动,有没有什么方法可以创建一个.jar文件,我可以在Eclipse和Android Studio上使用它?
我已经创建了这个模块并尝试构建,因此它生成了.aar文件,而不是.jar文件.
我正在开发一个 Android 库,我将把它分发给我的业务合作伙伴。我已经用我的密钥库对其进行了签名,并且我想在运行时验证签名以查看我的库是否是使用不同的签名重新编译的。但是验证签名的正常方式
PackageManager pm = ctx.getPackageManager();
(PackageInfo packageInfo = pm.getPackageInfo(ctx.getPackageName(),
PackageManager.GET_SIGNATURES);)
Run Code Online (Sandbox Code Playgroud)
如果 APK 不工作,因为它只返回应用程序的签名,而不是我为我的库签名的签名。有没有办法做到这一点?
我想写一个可以用模块扩展的android应用程序(android库).模块应在运行时加载.因此,它们将从URL下载并存储在目录中.这些模块是aar文件.
有没有办法在运行时动态加载aar文件?
我知道可以使用URLClassLoader加载包含的classes.jar.但比我无法加载布局,字符串,...资源.HM
有谁知道如何解决这个问题?
编辑:
我找到了一些相关的主题:
由于第一个链接的答案,它似乎不起作用.我希望我的想法是错的.
我正在尝试创建一个包含简单服务的Android库.例如:
public class BasicService extends Service {
public BasicService() {
Log.d("I", "work");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我按以下方式启动服务:
startService(new Intent(this, BasicService.class));
Run Code Online (Sandbox Code Playgroud)
该服务被编译成一个AAR文件,在将其添加到应用程序后,我得到一个ClassNotFoundException.
Caused by: java.lang.ClassNotFoundException: Didn't find class "nl.company.example.library.Services.BasicService" on path: DexPathList[[zip file "/data/app/nl.example.aartest-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
Run Code Online (Sandbox Code Playgroud)
我不需要绑定服务,因为应用程序不必与服务通信.我也不需要aidl接口,因为我不想与其他应用程序共享该服务.我知道我需要在应用程序端(而不是库)声明服务,所以我按照以下方式执行:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nl.company.example.exampleApp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="19" />
<application
android:settings... >
<service
android:name="nl.company.example.library.Services.BasicService"
android:enabled="true"
android:exported="true" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
这是我的图书馆的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nl.company.example.library" >
<application/>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我在Stackoverflow/Google上做了一些研究,但我无法找到问题的答案.
还尝试了不同的启动服务的方式(在行动等)但到目前为止没有好处.
欢迎所有的帮助,如果我提出了一个邪恶的重复问题,我会道歉.
我找到了一个xml文件GoogleDependencyFlurryPlugin.xml
<dependencies>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-base</artifactId><version>8.4+</version></dependency>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-basement</artifactId><version>8.4+</version></dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
确实是一个xml文件GoogleDependencyPlayGameServicesPlugin.xml
<dependencies>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-games</artifactId><version>8.4+</version></dependency>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-plus</artifactId><version>8.4+</version></dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
现在,前一个文件只有一个点
这似乎造成了一个巨大的问题.AndroidJavaException:java.lang.NoSuchMethodError:一旦在设备上运行.
Android专家,如果你有"基地",你必须有 "地下室"......或者反之亦然?
事实上,WRT游戏服务 - 游戏或游戏服务 - 加上,或许其中一个/两个在某种程度上(或相反?)基地/地下室?
当调用GoogleApiAvailability时,我的Android库(aar)中的类未找到异常.
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.GoogleApiAvailability" on path: DexPathList[[zip file "/data/app/com.myunityplugin.PushNotifications-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myunityplugin.PushNotifications-1/lib/arm, /vendor/lib, /system/lib]]
Run Code Online (Sandbox Code Playgroud)
错误是不言自明的,但我不确定我做错了什么.我很擅长gradle和AndroidStudio.
我的gradle.build中有以下依赖项:
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
Run Code Online (Sandbox Code Playgroud)
我认为问题是播放服务库需要包含在aar中,而编译不会这样做.我尝试使用'运行时',但我得到"找不到gradle dsl运行时".
问题:
导致错误的行
GoogleApiAvailability ServiceAvailability = GoogleApiAvailability.getInstance();
Run Code Online (Sandbox Code Playgroud)
例外:
05-23 05:38:48.221 28055-28055/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myunityplugin.PushNotifications, PID: 28055
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/GoogleApiAvailability;
at com.myplugin.unitynotification.GCM.GCM.checkPlayServices(GCM.java:33)
at com.myplugin.unitynotification.GCM.MainActivity.onCreate(MainActivity.java:80)
at android.app.Activity.performCreate(Activity.java:6550)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3108)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3263)
at android.app.ActivityThread.access$1000(ActivityThread.java:197)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1687)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6897)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) …Run Code Online (Sandbox Code Playgroud) android gradle google-play-services android-gradle-plugin aar
我正在尝试从我的库中构建一个@aar包,用作客户端项目中的依赖项.
在我的库模块中,我正在使用:
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
在达到客户端依赖关系之前,我想要解决代码并使Java 7兼容.这意味着我需要实际提供一个@aar包,其中Lambda函数和所有其他Java 8相关功能已经移植到Java 7字节码.
我面临的问题是在库模块上使用:
apply plugin: 'com.android.library'
Run Code Online (Sandbox Code Playgroud)
没有执行desugaring任务,这意味着字节码包含Java 8相关的导入,如:
java.lang.invoke.LambdaMetafactory
Run Code Online (Sandbox Code Playgroud)
这将迫使我的客户端将他的编译选项更新为JavaVersion.VERSION_1_8,这是我想要避免的事情.
所以作为最后一个问题:'com.android.library'插件执行的desugaring任务是仅在'com.android.application'插件中可用?如果是这种情况,请你帮我提一些关于如何将这一步也包含在库插件中的提示?
我正在使用本教程将我的android lib上传到bintray.com
我按照以下步骤上传lib:
- gpg --gen-key
- gpg --list-keys
- gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PUBLIC_KEY_ID
- gpg -a --export yourmail@email.com> public_key_sender.asc
- gpg -a --export-secret-key yourmail@email.com> private_key_sender.asc
我已将PUBLIC_KEY_ID替换为我的密钥ID,对于电子邮件也是如此.
我不知道为什么我没有收到电子邮件?
我已经使用 ARFoundation 包在 Unity 中构建了一个 ARCore 应用程序。然后,我按照以下链接中的说明将 Unity 应用程序嵌入到原生 Android 应用程序中:Embedded Unity inside Android App。
AR 应用程序作为独立应用程序运行良好。但是我在将其嵌入本机 Android 应用程序时遇到错误:
E/Unity: Unable to find UnityARCore
E/Unity: DllNotFoundException: UnityARCore
at (wrapper managed-to-native) UnityEngine.XR.ARCore.Api:UnityARCore_setCameraPermissionProvider (UnityEngine.XR.ARCore.Api/CameraPermissionRequestProvider)
at UnityEngine.XR.ARCore.ARCoreCameraExtension.Register () [0x00000] in <filename unknown>:0
Run Code Online (Sandbox Code Playgroud) 我想为 android 创建一个包含一些顶级函数的 kotlin 库。
我创建了一个 android 库项目。
我添加了一些顶级函数和一些类
// filename TestMethodFirst.kt
fun testMethodFirst() {}
Run Code Online (Sandbox Code Playgroud)
// filename TestClass.kt
class TestClass() {}
Run Code Online (Sandbox Code Playgroud)
我已经使用 ./gradlew build 构建了库
我已将此库作为 aar 库包含到另一个项目中
库中的类已顺利解析并导入。顶级函数尚未解析,因此无法使用。我尝试过手动添加导入,但它也不起作用。当我尝试使用 java 中的顶级函数作为静态方法执行时,它就可以工作了。
这不起作用
// filename Test1.kt
fun test1() {
testMethodFirst()
}
Run Code Online (Sandbox Code Playgroud)
这有效
// filename Test2.kt
fun test1() {
TestClass()
}
Run Code Online (Sandbox Code Playgroud)
这有效
// filename Test3.java
class Test {
void test() {
TestMethodFirstKt.testMethodFirst();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用 AS 4.1 Canary 7 和 AS 3.6.2
附件包含库项目和aar库