Mam trochę nietypowy problem - moja aplikacja na Androida zawiera natywne biblioteki i buduję natywne biblioteki dla armeabi-v7a i x86. Jednak teraz muszę zintegrować bibliotekę stron trzecich z moją aplikacją, która zawiera również biblioteki natywne (trzecia biblioteka to Crashlytics, którą zawarłem za pośrednictwem Maven z mojego build.gradle). Problem polega na tym, że AAR biblioteki strony trzeciej zapewnia wszystkie arhitectures (armeabi, arm64-v8a, armeabi-v7a, mips, mips64, x86 i x86_64), a moja aplikacja obsługuje tylko armeabi-v7a i x86 (arm64-v8a jest planowana na najbliższą przyszłość) , więc gdy budowany jest końcowy plik APK, zawiera on wszystkie biblioteki ABI i tylko x86 oraz ABI armeabi-v7a mojego natywnego kodu. Powoduje to awarię mojej aplikacji po uruchomieniu na urządzeniu arm64, takim jak Galaxy S6.Jak importować tylko wybrane ABI ABI z natywnej biblioteki z AAR?
Moje pytanie brzmi: czy możliwe jest włączenie tylko wybranych ABI z AAR trzeciej strony?
Należy pamiętać, że jestem świadomy APK splits, ale to rozwiązuje tylko częściowo mój problem, tj. Działa tylko wtedy, gdy rozpowszechniam moją aplikację za pośrednictwem Sklepu Play. Mimo że Play Store obsługuje dystrybucję testów beta, propagacja zaktualizowanego pliku APK jest raczej powolna, więc wcześniej przesyłając aktualizację do kanału beta PlayStore aplikacji, przesyłająśmy aktualizację za pośrednictwem systemu dystrybucji beta Crashlytics, który jest znacznie szybszy. Problem polega na tym, że system dystrybucji Crashlytics nie obsługuje splitów APK (czy też nie mam racji?). Dlatego muszę zbudować "uniwersalny" pakiet APK, który będzie zawierał tylko wybrane ABI. Jak to osiągnąć?
Chociaż byłbym zadowolony nawet z odpowiedzi specyficznych dla Crashlytics (jak na przykład, jak dystrybuować split APK za pośrednictwem swojego kanału beta), byłbym bardziej zadowolony z rozwiązania do budowania "uniwersalnego" pakietu APK, który zawiera tylko wybrane ABI, ponieważ w naszej firmie udostępniamy naszym klientom także pakiety SDK jako archiwa AAR, które zawierają tylko obsługiwane architektury. Chcielibyśmy im przekazać instrukcje postępowania w przypadku, gdy integrują nasz pakiet SDK z innymi pakietami SDK, które mają obsługiwane różne ABI.
Używam najnowszego stabilnego studia Android (1.2.1.1), gradle 2.4 i android gradle w wersji 1.2.3.
Zobacz czy 'ndk.abiFilter' w smaku produktu /' defaultConfig' DSL pozwoli Ci określić wiele elementów. Przykłady, które widzę, wymieniają tylko jeden. Jeśli akceptuje listę rozdzielaną przecinkami, prawdopodobnie rozwiąże ona Twój problem. – CommonsWare
Próbowałem dokładnie tego prirora zadając pytanie tutaj na stackoverflow. Wystąpił błąd gradulacyjny, jeśli określę wiele ABI w abiFilter, mówiąc, że metoda DSL "abiFilter" nie istnieje. Próbowałem nawet wstawiać wiele ABI wewnątrz jednego ciągu do abiFilter, ale to też nie działało - w ogóle robiło APK bez natywnych bibliotek. – DoDo