Build Error CM12.1, missing reference to a JAR - Android Q&A, Help & Troubleshooting

Hi,
I currently try building this one myself:
http://forum.xda-developers.com/android/development/rom-cyanogenmod-12-0-samsung-express-gt-t2949359
it's CM 12.1 for the Samsung Galaxy Express GT-I8730
After hours of building it breaks with a missing library.
Code:
frameworks/testing/runner/src/main/java/android/support/test/internal/runner/ClassPathScanner.java:19: error: package android.support.annotation does not exist
import android.support.annotation.VisibleForTesting;
build/core/java.mk:346: recipe for target '~/src/cm-12.1-main/out/target/common/obj/JAVA_LIBRARIES/android-support-test-src_intermediates/classes-full-debug.jar' failed
make: *** [~/src/cm-12.1-main/out/target/common/obj/JAVA_LIBRARIES/android-support-test-src_intermediates/classes-full-debug.jar] Error 41
package android.support.annotation is missing. It's available here
Code:
./frameworks/support/annotations/src/android/support/annotation
./prebuilts/sdk/current/support/annotations/android-support-annotations.jar
But it's not included in build.
This is the code in question, in build/core/java.mk:346
Code:
# Compile the java files to a .jar file.
# This intentionally depends on java_sources, not all_java_sources.
# Deps for generated source files must be handled separately,
# via deps on the target that generates the sources.
$(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS)
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES := $(LOCAL_JAR_EXCLUDE_FILES)
$(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES := $(LOCAL_JAR_PACKAGES)
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES := $(LOCAL_JAR_EXCLUDE_PACKAGES)
$(full_classes_compiled_jar): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS)
$(full_classes_compiled_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF)
$(full_classes_compiled_jar): $(java_sources) $(java_resource_sources) $(full_java_lib_deps) \
$(jar_manifest_file) $(layers_file) $(RenderScript_file_stamp) \
$(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(transform-java-to-classes.jar)
How do I find out the content of the variables? How do I modify it?
Since I am building from a branch, it probably is a temporary problem. I issued a repo sync, but it dit not help (yet).
any idea?
thanks
JPT

Related

[Q] Building a specific apk from CM7 sources

i was trying to build framework-res.apk
i went into android_frameworks_base/core/res from terminal
theres an Android.mk file there:
Code:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_PACKAGE_NAME := framework-res
LOCAL_CERTIFICATE := platform
# Tell aapt to create "extending (non-application)" resource IDs,
# since these resources will be used by many apps.
LOCAL_AAPT_FLAGS := -x
LOCAL_MODULE_TAGS := optional
# Install this alongside the libraries.
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
# Create package-export.apk, which other packages can use to get
# PRODUCT-agnostic resource data like IDs and type definitions.
LOCAL_EXPORT_PACKAGE_RESOURCES := true
include $(BUILD_PACKAGE)
# define a global intermediate target that other module may depend on.
.PHONY: framework-res-package-target
framework-res-package-target: $(LOCAL_BUILT_MODULE)
and then i did
make framework-res
make: *** No rule to make target `framework-res'. Stop.
can u help me with the process? im just a beginner.

Frameworks: base to native to base

Many people, even me, faced the following error during compilation of ROM sources:
make: *** No rule to make target `frameworks/native/data/etc/android.hardware.camera.xml', needed by `out/target/product/*/system/etc/permissions/android.hardware.camera.xml'. Stop.
build/core/product_config.mk:189: *** _nic.PRODUCTS.[[device/samsung/*/cm.mk]]: "frameworks/native/build/phone-hdpi-512-dalvik-heap.mk" does not exist. Stop.
These are just two. But many errors are similar to this as the packages are different but pointer location reference is the same. Here's the following that you can do to stop the error.
change all references from frameworks/base to frameworks/native
cat `grep -r "frameworks/base" ./*` | sed 's/frameworks\/base/frameworks\/native/'
The above command really works but takes a longer time and it is not 100% guaranteed that it will link the files properly!
(or)
grep -r "frameworks" *
I never tested this!
If trying to convert native to base, go the device tree to cm.mk or where the error is pointed.
If that file doesn't have any location, search in the include files.
Example:
# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)
# Inherit device configuration
$(call inherit-product, device/samsung/device/device.mk)
# Device identifier. This must come after all inclusions
PRODUCT_DEVICE := kdevice
PRODUCT_NAME := cm_device
PRODUCT_BRAND := samsung
PRODUCT_MODEL := device
PRODUCT_MANUFACTURER := samsung
PRODUCT_RELEASE_NAME := device
# Bootanimation
TARGET_SCREEN_HEIGHT := 800
TARGET_SCREEN_WIDTH := 480
The above cm.mk doesn't have any value but it includes two files.
Search in the included file which here is:
$(call inherit-product, vendor/cm/config/common_full_phone.mk)
$(call inherit-product, device/samsung/device/device.mk)
In one of the file, there must be pointer location. So search for it.
# Hardware features available on this device
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.camera.autofocus.xml:system/etc/permissions/android.hardware.camera.autofocus.xml \
frameworks/native/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \
frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml \
frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml \
frameworks/native/data/etc/android.hardware.telephony.gsm.xml:system/etc/permissions/android.hardware.telephony.gsm.xml \
frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \
frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml \
frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
frameworks/native/data/etc/android.software.sip.voip.xml:system/etc/permissions/android.software.sip.voip.xml \
frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml
Change the above code which contains frameworks/native to frameworks/base by find and replace option in text editor.
This method is very easy and takes up no time to work.
Save the file and you are done.
I personally solved the error by this method!
Hope it helps you too!

[Q] How do I properly use a prebuilt kernel with AOSP?

I'm trying to build AOSP for Moto X 2013 (ghost). I've successfully built the kernel separately already (and flashed it to my device to make sure it works) but I can't seem to find a way to tell AOSP to use it. I get the following error when running make -j16 otapackage:
No private recovery resources for TARGET_DEVICE ghost
make: *** No rule to make target `out/target/product/ghost/kernel', needed by `out/target/product/ghost/boot.img'. Stop.
I've already tried to add this line to device.mk:
LOCAL_KERNEL := device/motorola/ghost-kernel/zImage
But it did nothing.
Any ideas?
I think, you should use TARGET_PREBUILT_KERNEL variable
https://stackoverflow.com/questions/9008761/replace-the-prebuilt-kernel-in-the-android-platform-source
http://wiki.cyanogenmod.org/w/Doc:_integrated_kernel_building
Fixed this build step by adding these lines to the device makefile:
Code:
TARGET_PREBUILT_KERNEL := device/motorola/ghost-kernel/zImage
PRODUCT_COPY_FILES += \
$(TARGET_PREBUILT_KERNEL):kernel
Effectively, this copies the kernel file to the output directory to be processed by subsequent steps.

How to use 3rd party jar in system app

I want to use a 3rd party jar in the system app - Settings.
I have tried two methods, but both failed.
The Android version is 4.2.2 JB.
The first method is that I put the jar file into /packages/apps/Settings/ and modify the Android.mk.
Code:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_JAVA_LIBRARIES := bouncycastle telephony-common
LOCAL_STATIC_JAVA_LIBRARIES := guava android-support-v4 jsr305 nxpnfclib
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Settings
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := nxpnfclib.jar
include $(BUILD_MULTI_PREBUILT)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
Some proguard warnings show up:
Code:
Warning: class [com/nxp/nfclib/ntag/╦К.class] unexpectedly contains class [com.nxp.nfclib.ntag.ˊ]
Warning: there were 30 classes in incorrectly named files. You should make sure all file names correspond
to their class names. The directory hierarchies must correspond to the package hierarchies. If you don't mind
the mentioned classes not being written out, you could try your luck using the '-ignorewarnings' option.
Error: Please correct the above warnings first. make: *** [out/target/common/obj/APPS/Settings_intermed
iates/proguard.classes.jar] Error 1
Then I add some proguard flags to prevent this warnings. I can compile Android now. However, when I boot the system, some errors show up:
Code:
W/dalvikvm( 732): Unable to resolve superclass of Lcom/nxp/nfclib/ntag/NTag213215216; (1855)
W/dalvikvm( 732): Link of class 'Lcom/nxp/nfclib/ntag/NTag213215216;' failed
W/dalvikvm( 732): Unable to resolve superclass of Lcom/nxp/nfclib/ntag/NTag213F216F; (1844)
W/dalvikvm( 732): Link of class 'Lcom/nxp/nfclib/ntag/NTag213F216F;' failed
E/dalvikvm( 732): Could not find class 'com.nxp.nfclib.ntag.NTag213F216F', referenced from method com.nxp.nfclib.NxpNfcLib.ˊ
Another mothod: I put the jar file to /prebuilts/misc/common/nxp and write an Android.mk:
Code:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_JAVA_LIBRARIES := \
nxpnfclib$(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_MODULE_TAGS := optional
include $(BUILD_HOST_PREBUILT)
Then modify /packages/apps/Settings/Android.mk:
Code:
LOCAL_STATIC_JAVA_LIBRARIES := guava android-support-v4 jsr305 nxpnfclib
However, when I compile the whole AOSP, the same proguard warnings show up:
Code:
Warning: class [com/nxp/nfclib/ntag/╦К.class] unexpectedly contains class [com.nxp.nfclib.ntag.ˊ]
Warning: there were 30 classes in incorrectly named files. You should make sure all file names correspond
to their class names. The directory hierarchies must correspond to the package hierarchies. If you don't mind
the mentioned classes not being written out, you could try your luck using the '-ignorewarnings' option.
Error: Please correct the above warnings first. make: *** [out/target/common/obj/APPS/Settings_interm
ediates/proguard.classes.jar] Error 1
Is there some other way to add the jar?
The jar runs well if I use Android Studio to build an app.
Can I put the jar in the system instead of merge it into the system?

[Q][CM14] Linking error while building recovery

Hi, so i've tried to compile TWRP inside CM14 source and i've been struggling with linking error for a while
Code:
system/core/adb/adb_auth_client.cpp:94: error: undefined reference to 'android_pubkey_decode'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[ 80% 4855/6059] target C: libminzip ...ootable/recovery-twrp/minzip/SysUtil.c
ninja: build stopped: subcommand failed.
build/core/ninja.mk:151: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1
#### make failed to build some targets (04:34 (mm:ss)) ####
It's basicly CM14 not changed at all. What i discovered is that in OUT folder inside static libraries there is no libcrypto-utils build. In fact there is a folder but just with export-includes.txt
Here is part of system/core/adb/Android.mk
Code:
include $(CLEAR_VARS)
LOCAL_CLANG := true
LOCAL_MODULE := libadbd
LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0
LOCAL_SRC_FILES := \
$(LIBADB_SRC_FILES) \
adb_auth_client.cpp \
jdwp_service.cpp \
usb_linux_client.cpp \
LOCAL_SANITIZE := $(adb_target_sanitize)
# Even though we're building a static library (and thus there's no link step for
# this to take effect), this adds the includes to our path.
LOCAL_STATIC_LIBRARIES := libcrypto_utils_static libcrypto_static libbase
include $(BUILD_STATIC_LIBRARY)
And part of libcrypto_utils/Android.mk
Code:
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto_utils_static
LOCAL_SRC_FILES := android_pubkey.c
LOCAL_CFLAGS := -Wall -Werror -Wextra -std=c99
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_STATIC_LIBRARIES := libcrypto_static
include $(BUILD_STATIC_LIBRARY)
Also header file is included in adb_auth_client.cpp
Code:
#include <crypto_utils/android_pubkey.h>
What am i doing wrong?
Have you fixed this? I have same problem and i do not know how to fix it ..
_______________SOLVED____________________
https://github.com/discipuloosho/an...mmit/22801f5f78b5b996b163d54cf5c886a2d6db81c7
Anyone got a fix for this?
HaoZeke said:
Anyone got a fix for this?
Click to expand...
Click to collapse
Have you searched/posted this question within the the following thread that's a guide to performing this?
[GUIDE][NOOB FRIENDLY]How to compile TWRP from source step by step by Hacker432
Good Luck!
~~~~~~~~~~~~~~~
I Am The Egg Man,
They Are The Egg Men.
I Am The Walrus!
Coo Coo Cachoo!
I DO NOT PROVIDE SUPPORT VIA PM UNLESS ASKED/REQUESTED BY MYSELF.
PLEASE KEEP IT IN THE THREADS WHERE EVERYONE CAN SHARE

Categories

Resources