Как использовать файл aar вручную и правильно?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как использовать файл aar вручную и правильно?

Сообщение Anonymous »

Я прочитал «Как создать APK-файл Android без Gradle в командной строке?» и «Как скомпилировать приложение Android с помощью aapt2 без использования каких-либо инструментов сборки?», но оба ответа, похоже, не соответствуют моей цели (пытался использовать файл aar для создания приложения Android, имеющего внешнюю зависимость, вручную, ради обучения и понимания). как эти инструменты сборки Android работают внутри).
Я загружаю файл aar с сайта https://maven.google.com/web/index.html ... yout:2.2.0 и использовал этот сценарий сборки в качестве руководства по сборке пакета приложения Android без студии gradle/android, он успешно собирается без каких-либо запросов ошибки, однако во время выполнения выдает ошибку:

Код: Выделить всё

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloworld/com.example.helloworld.main}: android.view.InflateException: Binary XML file line #2 in com.example.helloworld:layout/activity_main: Binary XML file line #2 in com.example.helloworld:layout/activity_main: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:138)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7965)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: android.view.InflateException: Binary XML file line #2 in com.example.helloworld:layout/activity_main: Binary XML file line #2 in com.example.helloworld:layout/activity_main: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2 in com.example.helloworld:layout/activity_main: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
Caused by: java.lang.ClassNotFoundException: androidx.constraintlayout.widget.ConstraintLayout
Причина сбоя довольно очевидна: он не может разрешить символ ConstraintLayout, который используется в XML-файле макета, но я не знаю, как это исправить, Я попытался связать библиотеку ограниченийlayout-2.2.0/classes.jar, но после ее пересборки она все равно выдает ошибку.
Вот пошаговая инструкция по сборке приложения. (при условии, что загруженный файл AAR уже извлечен и debug.keystore уже создан):

Код: Выделить всё

aapt2 compile --dir res -o resources.zip
aapt2 compile --dir constraintlayout-2.2.0/res -o resources-constraintlayout.zip
aapt2 link --manifest AndroidManifest.xml --auto-add-overlay -R ./resources-constraintlayout.zip --java generated/ -I ~/Android/Sdk/platforms/android-34/android.jar -o ./sample.apk resources.zip
javac -classpath constraintlayout-2.2.0/classes.jar -classpath ~/Android/Sdk/platforms/android-34/android.jar -source 17 -target 17 -sourcepath com:generated generated/com/example/helloworld/R.java com/example/helloworld/main.java -d build/obj
d8 --release --classpath constraintlayout-2.2.0/classes.jar --classpath ~/Android/Sdk/platforms/android-34/android.jar --output . $(find build/obj/ -type f)
zip -uj ./sample.apk classes.dex
zipalign -p -f -v 4 ./sample.apk ./aligned_sample.apk
apksigner sign --ks debug.keystore --ks-pass pass:android --out ./signed_sample.apk ./aligned_sample.apk
Чтобы воспроизвести проблему, я создал репозиторий git, содержащий сценарий сборки и файл исходного кода.
РЕДАКТИРОВАТЬ:
оказывается, файл groups.jar на самом деле не связан должным образом (но компилятор молчит, черт возьми). и чтобы присоединиться к файлу jar в команде javac, мне нужно разделить его на: вместо добавления еще одного параметра -classpath
и после обновления скрипт сборки, одна за другой выскакивают ошибки с просьбой выполнить зависимости, которых нет (я не ожидал, что будет так много зависимостей и даже не уверен, что это будет использовано)
Кое-что я закончил, но кое-что еще осталось и Я не знаю, как это решить:

Код: Выделить всё

Warning in libs/savedstate-1.2.1/classes.jar:androidx/savedstate/Recreator.class:
Type `androidx.lifecycle.LifecycleEventObserver` was not found, it is required for default or static interface methods
desugaring of `androidx.savedstate.Recreator`
Warning in libs/activity-1.9.3/classes.jar:androidx/activity/PipHintTrackerKt$trackPipAnimationHintView$2.class:
Type `kotlinx.coroutines.flow.FlowCollector` was not found, it is required for default or static interface methods desu
garing of `androidx.activity.PipHintTrackerKt$trackPipAnimationHintView$2`
Warning in libs/core-1.15.0/classes.jar:androidx/core/app/ComponentActivity.class:
Type `androidx.lifecycle.LifecycleOwner` was not found, it is required for default or static interface methods desugari
ng of `androidx.core.app.ComponentActivity`
Warning in libs/appcompat-resources-1.7.0/classes.jar:androidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruC
ache.class:
Type `androidx.collection.LruCache` was not found, it is required for default or static interface methods desugaring of
`androidx.appcompat.widget.ResourceManagerInternal$ColorFilterLruCache`
Warning in libs/activity-1.9.3/classes.jar:androidx/activity/ComponentActivity.class:
Type `androidx.lifecycle.ViewModelStoreOwner` was not found, it is required for default or static interface methods des
ugaring of `androidx.activity.ComponentActivity`
Warning in libs/activity-1.9.3/classes.jar:androidx/activity/ComponentActivity.class:
Type `androidx.lifecycle.HasDefaultViewModelProviderFactory` was not found, it is required for default or static interf
ace methods desugaring of `androidx.activity.ComponentActivity`
Warning in libs/emoji2-1.5.0/classes.jar:androidx/emoji2/text/EmojiCompatInitializer$1.class:
Type `androidx.lifecycle.DefaultLifecycleObserver` was not found, it is required for default or static interface method
s desugaring of `androidx.emoji2.text.EmojiCompatInitializer$1`
Warning in libs/fragment-1.8.5/classes.jar:androidx/fragment/app/FragmentManagerViewModel$1.class:
Type `androidx.lifecycle.ViewModelProvider$Factory` was not found, it is required for default or static interface metho
ds desugaring of `androidx.fragment.app.FragmentManagerViewModel$1`
Warning in libs/lifecycle-extensions-2.2.0/classes.jar:androidx/lifecycle/ViewModelProviders$DefaultFactory.class:
Type `androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory` was not found, it is required for default or static
interface methods desugaring of `androidx.lifecycle.ViewModelProviders$DefaultFactory`
Warning in libs/fragment-1.8.5/classes.jar:androidx/fragment/app/FragmentManagerViewModel.class:
Type `androidx.lifecycle.ViewModel` was not found, it is required for default or static interface methods desugaring of
`androidx.fragment.app.FragmentManagerViewModel`
Warning in libs/fragment-1.8.5/classes.jar:androidx/fragment/app/DialogFragment$4.class:
Type `androidx.lifecycle.Observer` was not found, it is required for default or static interface methods desugaring of
`androidx.fragment.app.DialogFragment$4`
Короче говоря, ошибки связаны с отсутствием жизненного цикла, androidx.collection и ядра сопрограммы kotlinx.
Я попробовал загрузить жизненный цикл, коллекцию androidx и Артефакт сопрограммы kotlinx, но он по-прежнему выдает ту же ошибку (после проверки содержимого jar с помощью unzip -l я могу подтвердить, что символ действительно отсутствует, но я также не уверен, где он находится)

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»