With my script below:
echo "Setting environment variables..."
SDK="${HOME}/Programs/Android"
BUILD_TOOLS="${SDK}/build-tools/29.0.2"
PLATFORM="${SDK}/platforms/android-29"
ANDROID_API=29
APK_NAME="ECLAndroidSkeleton"
PACKAGE_NAME="ecl.android.skeleton"
ORG_DIRS="${PACKAGE_NAME//./\/}"
NDK="${SDK}/ndk-bundle"
ANDROID_TOOLCHAIN="${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi23-clang"
ECL="${HOME}/Programs/ecl"
ECL_ANDROID_DIR="${ECL}/ecl-armv7a-linux-androideabi"
ECL_LIB_DIR="${ECL_ANDROID_DIR}/lib/ecl-16.1.3"
KEY_PASS="android123"
echo "Cleaning build directories..."
rm -rf build/gen build/obj build/apk
echo "Creating build directories..."
mkdir -p build/gen build/obj build/apk build/apk/lib/armeabi-v7a
if [ ! -f keystore.jks ] || [ "$1" == "key" ]; then
if [ -f keystore.jks ]; then
echo "Deleting ./keystore.jks..."
rm -rf keystore.jks
fi
echo "Generating new ./keystore.jks..."
keytool -genkeypair -keystore keystore.jks -alias androidkey \
-validity 10000 -keyalg RSA -keysize 2048
if [ "$1" == "key" ]; then exit 0; fi
fi
echo "Compiling C code..."
${ANDROID_TOOLCHAIN} -shared -o build/apk/lib/armeabi-v7a/libhelloecl.so \
-DANDROID -llog \
-I"${ECL_ANDROID_DIR}"/include \
jni/ecl_boot.c \
jni/ecl_thread.c \
jni/org_lisp_ecl_EmbeddedCommonLisp.c \
"${ECL_ANDROID_DIR}"/lib/libecl.so
${ANDROID_TOOLCHAIN} -shared -o build/apk/lib/armeabi-v7a/libandroidlog.so \
-DANDROID -llog \
jni/android_log.c
echo "Copying ${ECL_ANDROID_DIR}/lib/libecl.so to ./build/apk/lib/armeabi-v7a/..."
cp "${ECL_ANDROID_DIR}"/lib/libecl.so ./build/apk/lib/armeabi-v7a/
echo "Copying assets to APK..."
MODULES_DIR=./assets/lisp/lib
rm -rf "${MODULES_DIR}"
mkdir -p "${MODULES_DIR}"
cp "${ECL_LIB_DIR}"/help.doc "${MODULES_DIR}"
cp "${ECL_LIB_DIR}"/asdf.fas "${MODULES_DIR}"
#cp "${ECL_LIB_DIR}"/encodings/* "${MODULES_DIR}"
unzip -qq -o ./libs/lisp.zip -d "${MODULES_DIR}"
"${NDK}"/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip "${MODULES_DIR}"/*.fas
cp -r ./assets/ ./build/apk/
echo "Generate ./build/gen/${ORG_DIRS}/R.java file..."
"${BUILD_TOOLS}/aapt" package -f -m -J build/gen/ -S res \
-M AndroidManifest.xml -I "${PLATFORM}/android.jar"
echo "Compiling the java files in ./build/obj/*.class..."
javac -bootclasspath "${JAVA_HOME}/jre/lib/rt.jar" \
-classpath "${PLATFORM}/android.jar" \
-d build/obj \
build/gen/"${ORG_DIRS}"/R.java \
src/"${ORG_DIRS}"/EmbeddedCommonLisp.java \
src/"${ORG_DIRS}"/HelloEclActivity.java
echo "Creating ./build/apk/classes.dex..."
"${BUILD_TOOLS}/dx" --dex --output=build/apk/classes.dex build/obj/
echo "Packaging ./build/${APK_NAME}.unsigned.apk..."
"${BUILD_TOOLS}/aapt" package -f -M AndroidManifest.xml -S res/ \
-I "${PLATFORM}/android.jar" \
-F build/"${APK_NAME}".unsigned.apk build/apk/
echo "Zipaligning unsigned APK to ./build/${APK_NAME}.aligned.apk..."
"${BUILD_TOOLS}/zipalign" -f -p 4 \
build/"${APK_NAME}".unsigned.apk build/"${APK_NAME}".aligned.apk
echo "Signing aligned APK to ./build/${APK_NAME}.apk..."
if [[ -n "${KEY_PASS}" ]]; then
"${BUILD_TOOLS}/apksigner" sign --ks keystore.jks \
--ks-key-alias androidkey \
--ks-pass pass:"${KEY_PASS}" \
--key-pass pass:"${KEY_PASS}" \
--out build/"${APK_NAME}".apk \
build/"${APK_NAME}".aligned.apk
else
"${BUILD_TOOLS}/apksigner" sign --ks keystore.jks \
--ks-key-alias androidkey \
--out build/"${APK_NAME}".apk \
build/"${APK_NAME}".aligned.apk
fi
echo "Clean lisp libs because ASDF..."
rm -r assets/lisp/lib/*
rm -r build/apk/assets/lisp/lib/*
echo "Testing APK..."
"${SDK}/platform-tools/adb" install -r build/"${APK_NAME}".apk
"${SDK}/platform-tools/adb" shell am start --activity-clear-top -n "${PACKAGE_NAME}"/.HelloEclActivity
And the Layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:background="#1de9b6">
<View
android:id="@+id/rect001"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#E7040F" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_text"/>
</LinearLayout>
I can compile with success without gradle. But with the layout below:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1de9b6">
<View
android:id="@+id/rect001"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#E7040F"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_text"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
I can't compile:
Generate ./build/gen/ecl/android/skeleton/R.java file...
(skipping file '.#main.xml' due to ANDROID_AAPT_IGNORE pattern '.*')
res/layout/main.xml:10: error: No resource identifier found for attribute 'layout_constraintRight_toRightOf' in package 'ecl.android.skeleton'
res/layout/main.xml:10: error: No resource identifier found for attribute 'layout_constraintLeft_toLeftOf' in package 'ecl.android.skeleton'
res/layout/main.xml:18: error: No resource identifier found for attribute 'layout_constraintRight_toRightOf' in package 'ecl.android.skeleton'
res/layout/main.xml:18: error: No resource identifier found for attribute 'layout_constraintLeft_toLeftOf' in package 'ecl.android.skeleton'
So, I know that I need the constraintlayout library to aapt command, but I don't know which file or files I need add and where I put this.
Summing up:
appt command?
- Where I download the files that I need add?
I can download the lib file now:
https://dl.google.com/dl/android/maven2/androidx/constraintlayout/constraintlayout/2.0.0-beta4/constraintlayout-2.0.0-beta4.aar
But I don't know where in the script I must add the constraintlayout-2.0.0-beta4.aar file yet.
- Where I download the files that I need add?
I think need make many things:
First I inspect the lib file:
# unzip -Z1 constraintlayout-2.0.0-beta4.aar
AndroidManifest.xml
R.txt
classes.jar
res/
res/values/
res/values/values.xml
values/
So, unzip this:
# unzip -d constraintlayout-2.0.0-beta4 constraintlayout-2.0.0-beta4.aar
I did manually by now.
I changed the build script to add the res/ of the constraintlayout library:
echo "Generate ./build/gen/${ORG_DIRS}/R.java file..."
"${BUILD_TOOLS}/aapt" package --auto-add-overlay -f -m -J build/gen/ \
-S res \
-S "${ANDROIDX_LIBS}"/constraintlayout-2.0.0-beta4/res \
-M AndroidManifest.xml -I "${PLATFORM}/android.jar"
and it seems to work, I don't get an error anymore.
I can compile with:
echo "Compiling the java files in ./build/obj/*.class..."
javac -bootclasspath "${JAVA_HOME}/jre/lib/rt.jar" \
-classpath "${PLATFORM}/android.jar":"${ANDROIDX_LIBS}"/constraintlayout-2.0.0-beta4/classes.jar \
-d build/obj \
build/gen/"${ORG_DIRS}"/R.java \
src/"${ORG_DIRS}"/EmbeddedCommonLisp.java \
src/"${ORG_DIRS}"/HelloEclActivity.java
But I can't package the app. The error message:
# ...
Copying assets to APK...
Generate ./build/gen/ecl/android/skeleton/R.java file...
Compiling the java files in ./build/obj/*.class...
Creating ./build/apk/classes.dex...
Packaging ./build/ECLAndroidSkeleton.unsigned.apk...
res/layout/main.xml:11: error: No resource identifier found for attribute 'layout_constraintRight_toRightOf' in package 'ecl.android.skeleton'
res/layout/main.xml:11: error: No resource identifier found for attribute 'layout_constraintLeft_toLeftOf' in package 'ecl.android.skeleton'
res/layout/main.xml:19: error: No resource identifier found for attribute 'layout_constraintRight_toRightOf' in package 'ecl.android.skeleton'
res/layout/main.xml:19: error: No resource identifier found for attribute 'layout_constraintLeft_toLeftOf' in package 'ecl.android.skeleton'
When I change the main.xml file in the 4th line to:
xmlns:app="http://schemas.android.com/apk/ecl.android.skeleton"
I can create the apk, however when I test in my phone, its broken. The adb error:
03-24 09:41:05.420 19978 19978 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
03-24 09:41:05.420 19978 19978 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.widget.ConstraintLayout" on path: DexPathList[[zip file "/data/app/ecl.android.skeleton-2/base.apk"],nativeLibraryDirectories=[/data/app/ecl.android.skeleton-2/lib/arm, /data/app/ecl.android.skeleton-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
03-24 09:41:05.420 19978 19978 E AndroidRuntime: Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
03-24 09:41:05.426 1796 2936 W ActivityManager: Force finishing activity ecl.android.skeleton/.HelloEclActivity
So I add the libs in the dex step:
echo "Creating ./build/apk/classes.dex..."
"${BUILD_TOOLS}/dx" --dex --output=build/apk/classes.dex \
"${ANDROIDX_LIBS}"/constraintlayout-solver-2.0.0-beta4.jar \
"${ANDROIDX_LIBS}"/constraintlayout-2.0.0-beta4/classes.jar \
build/obj/
I needed add the "constraintlayout-solver-2.0.0-beta4.jar" because before this error I get one error complaining this.
And I get other now:
03-25 10:20:01.401 12274 12274 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.widget.R$styleable" on path: DexPathList[[zip file "/data/app/ecl.android.skeleton-2/base.apk"],nativeLibraryDirectories=[/data/app/ecl.android.skeleton-2/lib/arm, /data/app/ecl.android.skeleton-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
I saw that the constraintlayout-solver-2.0.0-beta4.jar haven't the class androidx.constraintlayout.widget.R$styleable:
# unzip -Z1 constraintlayout-2.0.0-beta4/classes.jar
androidx/constraintlayout/helper/widget/Flow.class
androidx/constraintlayout/helper/widget/Layer.class
androidx/constraintlayout/motion/utils/ArcCurveFit$Arc.class
androidx/constraintlayout/motion/utils/ArcCurveFit.class
androidx/constraintlayout/motion/utils/CurveFit$Constant.class
androidx/constraintlayout/motion/utils/CurveFit.class
androidx/constraintlayout/motion/utils/Easing$CubicEasing.class
androidx/constraintlayout/motion/utils/Easing.class
androidx/constraintlayout/motion/utils/HyperSpline$Cubic.class
androidx/constraintlayout/motion/utils/HyperSpline.class
androidx/constraintlayout/motion/utils/LinearCurveFit.class
androidx/constraintlayout/motion/utils/MonotonicCurveFit.class
androidx/constraintlayout/motion/utils/Oscillator.class
androidx/constraintlayout/motion/utils/StopLogic.class
androidx/constraintlayout/motion/utils/VelocityMatrix.class
androidx/constraintlayout/motion/widget/Animatable.class
androidx/constraintlayout/motion/widget/CustomFloatAttributes.class
androidx/constraintlayout/motion/widget/Debug.class
androidx/constraintlayout/motion/widget/DesignTool.class
androidx/constraintlayout/motion/widget/Key.class
androidx/constraintlayout/motion/widget/KeyAttributes$Loader.class
androidx/constraintlayout/motion/widget/KeyAttributes.class
androidx/constraintlayout/motion/widget/KeyCache.class
androidx/constraintlayout/motion/widget/KeyCycle$Loader.class
androidx/constraintlayout/motion/widget/KeyCycle.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$1.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$AlphaSet.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$CustomSet.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$CycleOscillator.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$ElevationSet.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$IntDoubleSort.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$IntFloatFloatSort.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$PathRotateSet.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$ProgressSet.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$RotationSet.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$RotationXset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$RotationYset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$ScaleXset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$ScaleYset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$TranslationXset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$TranslationYset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$TranslationZset.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator$WavePoint.class
androidx/constraintlayout/motion/widget/KeyCycleOscillator.class
androidx/constraintlayout/motion/widget/KeyFrames.class
androidx/constraintlayout/motion/widget/KeyPosition$Loader.class
androidx/constraintlayout/motion/widget/KeyPosition.class
androidx/constraintlayout/motion/widget/KeyPositionBase.class
androidx/constraintlayout/motion/widget/KeyTimeCycle$Loader.class
androidx/constraintlayout/motion/widget/KeyTimeCycle.class
androidx/constraintlayout/motion/widget/KeyTrigger$Loader.class
androidx/constraintlayout/motion/widget/KeyTrigger.class
androidx/constraintlayout/motion/widget/MotionConstrainedPoint.class
androidx/constraintlayout/motion/widget/MotionController.class
androidx/constraintlayout/motion/widget/MotionHelper.class
androidx/constraintlayout/motion/widget/MotionInterpolator.class
androidx/constraintlayout/motion/widget/MotionLayout$DecelerateInterpolator.class
androidx/constraintlayout/motion/widget/MotionLayout$DevModeDraw.class
androidx/constraintlayout/motion/widget/MotionLayout$Model.class
androidx/constraintlayout/motion/widget/MotionLayout$MotionTracker.class
androidx/constraintlayout/motion/widget/MotionLayout$MyTracker.class
androidx/constraintlayout/motion/widget/MotionLayout$TransitionListener.class
androidx/constraintlayout/motion/widget/MotionLayout.class
androidx/constraintlayout/motion/widget/MotionPaths.class
androidx/constraintlayout/motion/widget/MotionScene$1.class
androidx/constraintlayout/motion/widget/MotionScene$Transition$TransitionOnClick.class
androidx/constraintlayout/motion/widget/MotionScene$Transition.class
androidx/constraintlayout/motion/widget/MotionScene.class
androidx/constraintlayout/motion/widget/ProxyInterface.class
androidx/constraintlayout/motion/widget/SplineSet$AlphaSet.class
androidx/constraintlayout/motion/widget/SplineSet$CustomSet.class
androidx/constraintlayout/motion/widget/SplineSet$ElevationSet.class
androidx/constraintlayout/motion/widget/SplineSet$PathRotate.class
androidx/constraintlayout/motion/widget/SplineSet$ProgressSet.class
androidx/constraintlayout/motion/widget/SplineSet$RotationSet.class
androidx/constraintlayout/motion/widget/SplineSet$RotationXset.class
androidx/constraintlayout/motion/widget/SplineSet$RotationYset.class
androidx/constraintlayout/motion/widget/SplineSet$ScaleXset.class
androidx/constraintlayout/motion/widget/SplineSet$ScaleYset.class
androidx/constraintlayout/motion/widget/SplineSet$Sort.class
androidx/constraintlayout/motion/widget/SplineSet$TranslationXset.class
androidx/constraintlayout/motion/widget/SplineSet$TranslationYset.class
androidx/constraintlayout/motion/widget/SplineSet$TranslationZset.class
androidx/constraintlayout/motion/widget/SplineSet.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$AlphaSet.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$CustomSet.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$ElevationSet.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$PathRotate.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$ProgressSet.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$RotationSet.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$RotationXset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$RotationYset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$ScaleXset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$ScaleYset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$Sort.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$TranslationXset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$TranslationYset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet$TranslationZset.class
androidx/constraintlayout/motion/widget/TimeCycleSplineSet.class
androidx/constraintlayout/motion/widget/TouchResponse$1.class
androidx/constraintlayout/motion/widget/TouchResponse$2.class
androidx/constraintlayout/motion/widget/TouchResponse.class
androidx/constraintlayout/motion/widget/TransitionAdapter.class
androidx/constraintlayout/motion/widget/TransitionBuilder.class
androidx/constraintlayout/utils/widget/ImageFilterButton$1.class
androidx/constraintlayout/utils/widget/ImageFilterButton$2.class
androidx/constraintlayout/utils/widget/ImageFilterButton.class
androidx/constraintlayout/utils/widget/ImageFilterView$1.class
androidx/constraintlayout/utils/widget/ImageFilterView$2.class
androidx/constraintlayout/utils/widget/ImageFilterView$ImageMatrix.class
androidx/constraintlayout/utils/widget/ImageFilterView.class
androidx/constraintlayout/utils/widget/MockView.class
androidx/constraintlayout/utils/widget/MotionTelltales.class
androidx/constraintlayout/widget/Barrier.class
androidx/constraintlayout/widget/ConstraintAttribute$1.class
androidx/constraintlayout/widget/ConstraintAttribute$AttributeType.class
androidx/constraintlayout/widget/ConstraintAttribute.class
androidx/constraintlayout/widget/ConstraintHelper.class
androidx/constraintlayout/widget/ConstraintLayout$1.class
androidx/constraintlayout/widget/ConstraintLayout$LayoutParams$Table.class
androidx/constraintlayout/widget/ConstraintLayout$LayoutParams.class
androidx/constraintlayout/widget/ConstraintLayout$Measurer.class
androidx/constraintlayout/widget/ConstraintLayout.class
androidx/constraintlayout/widget/ConstraintLayoutStates$State.class
androidx/constraintlayout/widget/ConstraintLayoutStates$Variant.class
androidx/constraintlayout/widget/ConstraintLayoutStates.class
androidx/constraintlayout/widget/ConstraintProperties.class
androidx/constraintlayout/widget/ConstraintSet$Constraint.class
androidx/constraintlayout/widget/ConstraintSet$Layout.class
androidx/constraintlayout/widget/ConstraintSet$Motion.class
androidx/constraintlayout/widget/ConstraintSet$PropertySet.class
androidx/constraintlayout/widget/ConstraintSet$Transform.class
androidx/constraintlayout/widget/ConstraintSet.class
androidx/constraintlayout/widget/Constraints$LayoutParams.class
androidx/constraintlayout/widget/Constraints.class
androidx/constraintlayout/widget/ConstraintsChangedListener.class
androidx/constraintlayout/widget/Group.class
androidx/constraintlayout/widget/Guideline.class
androidx/constraintlayout/widget/Placeholder.class
androidx/constraintlayout/widget/StateSet$State.class
androidx/constraintlayout/widget/StateSet$Variant.class
androidx/constraintlayout/widget/StateSet.class
androidx/constraintlayout/widget/VirtualLayout.class
So, I don't know now, I think need generate the androidx.constraintlayout.widget.R$styleable of someway.
I got it. Gradle doens't bite me yet! My compilation continue in seconds without this. And I understand all process to add a library.
So, the full script:
echo "Setting environment variables..."
SDK="${HOME}/Programs/Android"
BUILD_TOOLS="${SDK}/build-tools/29.0.2"
PLATFORM="${SDK}/platforms/android-23"
ANDROID_API=23
APK_NAME="ECLAndroidSkeleton"
PACKAGE_NAME="ecl.android.skeleton"
ORG_DIRS="${PACKAGE_NAME//./\/}"
NDK="${SDK}/ndk-bundle"
ANDROID_TOOLCHAIN="${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi23-clang"
ECL="${HOME}/Programs/ecl"
ECL_ANDROID_DIR="${ECL}/ecl-armv7a-linux-androideabi"
ECL_LIB_DIR="${ECL_ANDROID_DIR}/lib/ecl-16.1.3"
KEY_PASS="android123"
ANDROIDX_LIBS="${SDK}/androidx/"
echo "Cleaning build directories..."
rm -rf build/gen build/obj build/apk
echo "Creating build directories..."
mkdir -p build/gen build/obj build/apk build/apk/lib/armeabi-v7a
if [ ! -f keystore.jks ] || [ "$1" == "key" ]; then
if [ -f keystore.jks ]; then
echo "Deleting ./keystore.jks..."
rm -rf keystore.jks
fi
echo "Generating new ./keystore.jks..."
keytool -genkeypair -keystore keystore.jks -alias androidkey \
-validity 10000 -keyalg RSA -keysize 2048
if [ "$1" == "key" ]; then exit 0; fi
fi
echo "Compiling C code..."
${ANDROID_TOOLCHAIN} -shared -o build/apk/lib/armeabi-v7a/libhelloecl.so \
-DANDROID -llog \
-I"${ECL_ANDROID_DIR}"/include \
jni/ecl_boot.c \
jni/ecl_thread.c \
jni/org_lisp_ecl_EmbeddedCommonLisp.c \
"${ECL_ANDROID_DIR}"/lib/libecl.so
${ANDROID_TOOLCHAIN} -shared -o build/apk/lib/armeabi-v7a/libandroidlog.so \
-DANDROID -llog \
jni/android_log.c
echo "Copying ${ECL_ANDROID_DIR}/lib/libecl.so to ./build/apk/lib/armeabi-v7a/..."
cp "${ECL_ANDROID_DIR}"/lib/libecl.so ./build/apk/lib/armeabi-v7a/
echo "Copying assets to APK..."
MODULES_DIR=./assets/lisp/lib
rm -rf "${MODULES_DIR}"
mkdir -p "${MODULES_DIR}"
cp "${ECL_LIB_DIR}"/help.doc "${MODULES_DIR}"
cp "${ECL_LIB_DIR}"/asdf.fas "${MODULES_DIR}"
#cp "${ECL_LIB_DIR}"/encodings/* "${MODULES_DIR}"
unzip -qq -o ./libs/lisp.zip -d "${MODULES_DIR}"
"${NDK}"/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip "${MODULES_DIR}"/*.fas
cp -r ./assets/ ./build/apk/
echo "Generate ./build/gen/${ORG_DIRS}/R.java file..."
"${BUILD_TOOLS}/aapt" package --auto-add-overlay -f -m -J build/gen/ \
-S res/ \
-M AndroidManifest.xml -I "${PLATFORM}/android.jar"
echo "Generate androidx lib R.java files..."
"${BUILD_TOOLS}/aapt" package -f -m -J build/gen/ \
-S "${ANDROIDX_LIBS}"/constraintlayout-1.1.3/res/ \
-M "${ANDROIDX_LIBS}"/constraintlayout-1.1.3/AndroidManifest.xml -I "${PLATFORM}/android.jar"
echo "Compiling the java files in ./build/obj/*.class..."
javac -bootclasspath "${JAVA_HOME}/jre/lib/rt.jar" \
-classpath "${PLATFORM}/android.jar":"${ANDROIDX_LIBS}"/constraintlayout-1.1.3/classes.jar:"${ANDROIDX_LIBS}"/constraintlayout-solver-1.1.3.jar \
-d build/obj \
build/gen/"${ORG_DIRS}"/R.java \
build/gen/androidx/constraintlayout/widget/R.java \
src/"${ORG_DIRS}"/EmbeddedCommonLisp.java \
src/"${ORG_DIRS}"/HelloEclActivity.java
echo "Creating ./build/apk/classes.dex..."
"${BUILD_TOOLS}/dx" --dex --output=build/apk/classes.dex \
"${ANDROIDX_LIBS}"/constraintlayout-solver-1.1.3.jar \
"${ANDROIDX_LIBS}"/constraintlayout-1.1.3/classes.jar \
build/obj/
echo "Packaging ./build/${APK_NAME}.unsigned.apk..."
"${BUILD_TOOLS}/aapt" package -f -M AndroidManifest.xml \
-S res/ \
-I "${PLATFORM}/android.jar" \
-F build/"${APK_NAME}".unsigned.apk build/apk/
echo "Zipaligning unsigned APK to ./build/${APK_NAME}.aligned.apk..."
"${BUILD_TOOLS}/zipalign" -f -p 4 \
build/"${APK_NAME}".unsigned.apk build/"${APK_NAME}".aligned.apk
echo "Signing aligned APK to ./build/${APK_NAME}.apk..."
if [[ -n "${KEY_PASS}" ]]; then
"${BUILD_TOOLS}/apksigner" sign --ks keystore.jks \
--ks-key-alias androidkey \
--ks-pass pass:"${KEY_PASS}" \
--key-pass pass:"${KEY_PASS}" \
--out build/"${APK_NAME}".apk \
build/"${APK_NAME}".aligned.apk
else
"${BUILD_TOOLS}/apksigner" sign --ks keystore.jks \
--ks-key-alias androidkey \
--out build/"${APK_NAME}".apk \
build/"${APK_NAME}".aligned.apk
fi
echo "Clean lisp libs because ASDF..."
rm -r assets/lisp/lib/*
rm -r build/apk/assets/lisp/lib/*
echo "Testing APK..."
"${SDK}/platform-tools/adb" install -r build/"${APK_NAME}".apk
"${SDK}/platform-tools/adb" shell am start --activity-clear-top -n "${PACKAGE_NAME}"/.HelloEclActivity
What was wrong?
I was adding in the apk R.java file the res/ of the constraintlayout library, being that I need compile the lib R.java file separated. So, compile the all R.java files with javac add all .class files in the dex command. And works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With