Pracuję nad komercyjną aplikacją na Androida. Korzystam również z niektórych bibliotek licencjonowanych na podstawie różnych typów licencji, z których niektóre zawierają następujące informacje:
Jeśli w bibliotece znajduje się plik „UWAGI” z uwagami dotyczącymi źródła, należy dołączyć to UWAGĘ podczas dystrybucji
(Na przykład jeden z nich jest objęty licencją Apache License 2.0 ).
Istnieje więcej niż jedna biblioteka. Kiedy wykonuję kompilację za pomocą gradle lub Android Studio , otrzymuję następujący błąd kompilacji:
* What went wrong:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt
Odpowiedzi, które znalazłem do tej pory w Internecie i stackoverflow, sugerują usunięcie pliku license.txt (notice.txt lub innych plików, które mogą w ten sposób przeszkadzać) z opakowania, dodając do build.gradle
pliku:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
Zobacz na przykład: Android Studio 0.4 Duplikaty plików skopiowane w APK META-INF / LICENSE.txt
Zgodnie z licencją tych bibliotek ( Apache License 2.0 na przykład), pliki licencji i zawiadomienie powinno być włączone .
Moje pytanie: Jak mogę dodać wiele plików związanych z licencją (takich jak license.txt , notice.txt itp.) Z gradle do mojego projektu, aby zachować zgodność z licencjami ( szczegóły techniczne: teksty licencji będą łączone)?
Odpowiedzi:
Jest rozwiązanie, jeśli masz tylko jedną licencję używającą nazwy
license.txt
(czytaj: wszystkielicense.txt
kopie są identyczne):packagingOptions { pickFirst 'META-INF/license.txt' }
W przeciwnym razie firma Google wydała również wtyczkę Gradle do zarządzania licencjami na zależności. Zobacz tutaj . Nie próbowałem tego, ale wygląda na to, że jest w stanie agregować każdą zależność, a nawet generować aktywność wyświetlającą wszystkie te licencje.
źródło
jar
plikuDodaj następujące elementy do odpowiedniego pliku build.gradle
packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/MANIFEST.MF' }
źródło
W przypadku mojej aplikacji napotkałem ten sam problem. Musisz się upewnić, że nie dodałeś dwukrotnie żadnych bibliotek. Jeśli postępowałeś zgodnie z dokumentacją Firebase https://firebase.google.com/docs/android/setup
W takim przypadku nie należy dodawać biblioteki Firebase w Android Studio, tj. Plik-> struktura projektu-> chmura-> firebase
Musisz zrobić tylko jedno z obu, aby używać Firebase w swojej aplikacji na Androida.
Na koniec wyczyść i uruchom ponownie aplikację.
źródło
Możesz dodać wiele licencji w gradle, zobacz to
źródło
Myślę, że musisz uwzględnić tylko te opcje w pliku build.gradle:
android { packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' } }
źródło
Na pewno zadziała
packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' }
źródło