Java &引用;“没有制定目标的规则”;在android源应用程序中添加库时出错

Java &引用;“没有制定目标的规则”;在android源应用程序中添加库时出错,java,android,jar,android-source,Java,Android,Jar,Android Source,嗨,各位飞越者 我在AOSP构建系统中工作。我在我的应用程序(在包/应用程序中)中添加了另一个库依赖项,出现了以下奇怪错误: mmm -B packages/apps/MyApp/ make: Entering directory `/home/user/workspace/aosp' target R.java/Manifest.java: MyApp (out/target/common/obj/APPS/MyApp_intermediates/src/R.stamp) make: ***

嗨,各位飞越者

我在AOSP构建系统中工作。我在我的应用程序(在包/应用程序中)中添加了另一个库依赖项,出现了以下奇怪错误:

mmm -B packages/apps/MyApp/
make: Entering directory `/home/user/workspace/aosp'
target R.java/Manifest.java: MyApp (out/target/common/obj/APPS/MyApp_intermediates/src/R.stamp)
make: *** No rule to make target `out/target/common/obj/JAVA_LIBRARIES/bcprov-jdk15on-152_intermediates/javalib.jar', needed by `out/target/common/obj/APPS/MyApp_intermediates/classes-full-debug.jar'.  Stop.
我在androidstudio中没有这个错误,并且库可以按预期工作,但是我需要在AOSP中构建它

以下是Android.mk:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

# TAGS is test, so apk will end up in /data/app
LOCAL_MODULE_TAGS := tests
LOCAL_MODULE_OWNER := mycompany

# Java sources are in ./java
LOCAL_SRC_FILES := $(call all-java-files-under, java)

# Resources are in ./res
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res

# We need all these jars
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES := restlet-2.3.2-jsslutils
LOCAL_STATIC_JAVA_LIBRARIES += restlet-2.3.2-restlet-ext-nio
LOCAL_STATIC_JAVA_LIBRARIES += restlet-2.3.2-restlet
LOCAL_STATIC_JAVA_LIBRARIES += bcprov-jdk15on-152
LOCAL_STATIC_JAVA_LIBRARIES += ksoap2-android-assembly-3.4.0-jar-with-dependencies

LOCAL_JAVA_LIBRARIES :=  com.mycompany.myservice.lib

# The name of this application
LOCAL_PACKAGE_NAME := MyApp

# No Proguard
LOCAL_PROGUARD_ENABLED := disabled

# Build an APK
include $(BUILD_PACKAGE)
以及AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="mycompany.myapp" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.sensor" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_people"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <uses-library
            android:name="com.mycompany.myservice.lib"
            android:required="true" />

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name=".ws.CommandIntentService"
            android:exported="false" >
        </service>
        <service
            android:name=".ws.WSRequestIntentService"
            android:exported="false" >
        </service>
        <service
            android:name=".ws.CloudClientService"
            android:enabled="true"
            android:exported="false" >
        </service>
    </application>

</manifest>

对于bountycaste(bcprov…)和ksoap库,我都会遇到这个错误

我尝试了一个java反编译程序,试图找出libs工作与失败之间的区别。 我能够使用解压和jad(java反编译器)从restlet和ksoap2类中反编译类。两个文件都进行了反编译,没有出现问题

我还尝试使用
LOCAL\u prebuild\u STATIC\u JAVA\u库
将库包含为预编译库,但没有成功


提前谢谢

LOCAL\u STATIC\u JAVA\u库
必须引用在其他模块或本模块中构建的库。因为您使用的是预构建的jar文件,所以确实需要将
LOCAL\u prebuild\u STATIC\u JAVA\u库
添加到清单中。它可能看起来像:

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := android-support-v4:libs/android-support-v4.jar \
    restlet-2.3.2-jsslutils:libs/restlet-2.3.2-jsslutils.jar \
    restlet-2.3.2-restlet-ext-nio:libs/restlet-2.3.2-restlet-ext-nio.jar <add here other libraries>

include $(BUILD_MULTI_PREBUILT)
应该是

LOCAL_STATIC_JAVA_LIBRARIES += restlet-2.3.2-jsslutils
:=
应在第一条语句中使用

EDITED1:

可以方便地将多个restlet-2.3.2-*.jar文件放入单个库ie
restlet

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := restlet:libs/restlet-2.3.2-jsslutils.jar \
    restlet:libs/restlet-2.3.2-restlet-ext-nio.jar restlet:libs/restlet-2.3.2-restlet.jar
我自己没用过,但我想它可能有用

EDITED2:

最有可能的共享库
android-support-v4
已经存在于您的AOSP ROM中,因此您不需要在
LOCAL\u prebuild\u STATIC\u JAVA\u库中指定它

EDITED3:

我在清单中看到您正在使用Android项目库

    <uses-library
        android:name="com.mycompany.myservice.lib"
        android:required="true" />

AOSP不支持这样的库——只支持常规的jar库,因此需要额外处理资源文件。请在此处检查答案:


如果可以接受,最简单的解决方案是将库源代码放入应用程序项目中。或者在提供的链接中查看变通方法

正确答案是使用
本地\u预构建\u静态\u JAVA\u库
。在我的特定设置中,预构建的库位于
{root\u aosp\u dir}/external
中,因此我在这里发布之前没有找到它们/facepalm所有其他不相关的建议,例如
com.mycompany.myservice.lib
,它工作得非常好。。。
    <uses-library
        android:name="com.mycompany.myservice.lib"
        android:required="true" />