Menü
Bedava
kayıt
ev  /  ÜZERİNDE/java - edit - android yapısını gösterir. Android App Bundle Derlenmiş Android Kitaplığı Yapısı ile Uygulamaları Yayınlamanın Yeni Yolu

Java - düzenleme - android yapısını gösterir. Android App Bundle Derlenmiş Android Kitaplığı Yapısı ile Uygulamaları Yayınlamanın Yeni Yolu

Android Studio v 0.3.2'de Gradle ile oluşturulmuş bir projem var. Projemin diğer iki modüle (kütüphane) bağımlılığı var. Proje yapısı, build.gradle dosyalarıyla iyi tanımlanmıştır. Sorun şu ki... projeyi bir android cihazda çalıştırdığımda cihazımda 3'ü ayarladım. Bunlardan biri ana proje (tek doğru olan) ve diğer ikisi ithal modüller (bu ikisini kurmak istemiyorum). Bunu nasıl başarabilirim? Ya da neyi yanlış yapıyorum?

Proje yapısı:

  • MyLibModule
  • AnaProje
  • AnaProje->kütüphaneler-> MyOtherModule

Neresi MyLibModule ana proje ile aynı yolda çünkü bu modüle başka bir projede de ihtiyacım var.

Sadece açık olmak gerekirse: hepsi toplantı proje Tamam, tüm bağımlılıklar iyi, ancak cihazımda neden 3 APK alıyorum?

Bu sorunla mücadele eden bütün bir günün ardından, bu garip davranışın nedenini buldum. Sorun, kütüphane modülünün tezahüründeydi. Android stüdyosuna geçmeden önce Eclipse kullanıyordum. Ve kütüphane projesinin manifestosunda testActivity ilan ettim. Tüm test eylemlerini bildirimden kitaplık modüllerimden kaldırmak sorunu çözdü. Artık Android Studio yalnızca APK MainProject'i yükler.

Bazı kodlar: MyLibModule bildirimi:

Şu şekilde değiştirildi:

…. MyOtherModule için de aynısı.

NOT. Boş düğüm uygulamalar derleme hatalarından kaçınmak için bildirimde kalmalıdır.

Kitaplığınızı çalıştırmaktan amaç filtresini kaldırın

olarak değiştirildi

Bunun nedeni, kitaplıklarınızın build.gradle dosyalarınızda kitaplık olarak değil, uygulama olarak tanımlanmış olmasıdır. Şu satıra bakın:

Eklentiyi uygula: "android"

Ve şununla değiştirin:

Eklentiyi uygula: "android-kütüphane"

Uygulamalarla ilgili her şey kitaplık derleme dosyasında belirtilemeyeceğinden, derleme dosyasında başka değişiklikler yapmanız gerekebilir. Daha fazla bilgi için http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-projects adresine bakın.

Tanıtım

Bir programlama ortamının rahatlığı, büyük ölçüde, bir programcının gerçekleştirmesi gereken programlama ile ilgili olmayan ikincil eylemlerin sayısına ve aynı zamanda geliştirme ortamının kendi gereksinimlerine göre uygun şekilde yapılandırılması için çalışmanın derinliğine bağlıdır. Bu anlamda, bence ideal, yalnızca Windows uygulamalarının en basit ve en hızlı geliştirilmesi için keskinleştirilmiş Delphi ortamıdır (adil olmak gerekirse, Android ve diğer sistemler için uygulamaların geliştirilmesiyle her şeyin yolunda olduğunu not ediyorum). hala istediğim kadar pürüzsüz değil).

Bu anlamda, Android alanında yeterince rahat geliştirme ortamları yoktur, ancak ücretsiz işletim sistemleri dünyasındaki programların olması gerektiği gibi. Yakın zamana kadar, özel eklentilere sahip Eclipse, merkezi geliştirme aracı olarak görülüyordu. Ancak 2013 yazında Google, Eclipse'in uzun süredir rakibi olan IntelliJ IDEA sistemini temel alan Android Studio adlı yeni bir IDE'yi halka tanıttı. Henüz Beta aşamasına bile girmemiş olan sistemin erken versiyonuna rağmen Eclipse'in kolaylığını çoktan aştığını söylemeliyim.

Bununla birlikte, programcılar hala hem ortamı kurmanın sayısız nüansını hem de dağıtıma hazır uygulamaların son dosyalarını oluşturmak için olağandışı adımları araştırmak zorundadır. Ve bunların hepsi, arayüzün kodla düzgün çalışmasını sağlamak için kullanmanız gereken belirli sınıfları incelemenin arka planına aykırıdır.

Bu kadar uzun bir girişten sonra, Android Studio'nun dağıtıma hazır son apk dosyalarını nasıl oluşturabileceğini anlatacağım, çünkü nüanslar var. Umarım makalem, bugünün Android programlaması için belki de en iyi IDE olan acemi kullanıcılar için hayatı bir şekilde kolaylaştıracaktır.

manuel yol

  1. Android Studio'nun sol alt köşesinde, ekranın kenarlarında özel etiketlerin görüntülenmesini kontrol eden küçük bir düğme var. Kısayollar çeşitli yardımcı pencereleri açar. Ek olarak, fare işaretçisiyle bu düğmenin üzerine geldiğinizde, ihtiyacınız olanı hızlı bir şekilde açmak için tüm bu pencerelerin bir listesi görünür. Build Variants penceresini açalım ve Build Variant alanındaki modülümüzün önünde derleme modunu hata ayıklamadan yayına geçirelim.
  2. Ana menüde, Oluştur → İmzalı APK Oluştur'u açın. Küçük bir açıklamayla şöyle bir şeye çevrilebilecek bir mesaj var: “D Gradle yardımcı programı tarafından oluşturulan projeler için, imzalama bilgileri ve apk dosyalarının imzalanma sırası özel bir komut dosyasında yazılmalıdır. Komut dosyasını kullanıcı kılavuzunda açıklandığı gibi ayarlayın: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Signing-Configurations . Ardından "Gradle assembleRelease" komutunu çalıştırın ve build/apk/ klasöründe oluşturulan apk dosyasını alın» Bu mesaj, bir apk dosyası oluşturmak için ikinci yolu kullanmamızı şiddetle tavsiye ediyor. Bilgileri not alıyoruz, ancak Tamam'ı tıklatarak manuel yönteme devam ediyoruz.
  3. Apk dosyası için imza oluşturma yardımcısı penceresi açılır. Dağıtılan tüm Android uygulamalarının yazar tarafından dijital olarak imzalanması gerektiğini zaten biliyoruz, aksi takdirde uygulama kullanıcıların cihazlarına yüklenmeyecektir. Oluşturulan imza, bilgisayarınızda bulunan ve daha sonra apk dosyalarını imzalamak için çıkarılacağı özel bir depolama dosyasında saklanmalıdır. Aynı zamanda, bir depolama, farklı apk dosyaları için birkaç imza depolayabilir. Ayrıca, farklı apk dosyalarını imzalamak için aynı imza kullanılabilir. Bu nedenle, bir havuz oluşturmak için Yeni Oluştur… düğmesine tıklayın ve pencerede açılan alanları doldurun:
    1. Depo dosyasını yerleştirme yolu
    2. Kasaya erişim için şifre ve onay
    3. Çağrılacak imzanın adı
    4. İmza erişimi için şifre ve onay
    5. İmza geçerlilik süresi (varsayılan 25 yıl, değişmeden bırakın)
    6. Sertifika alanlarından en az biri. Genellikle ad ve soyad, şehir ve ülke (RU) bilgilerini girin.
  4. Tamam'ı tıklayın. Pencere kapanıyor ve bir önceki penceredeki tüm alanların girdiğimiz verilerle otomatik olarak doldurulduğunu görüyoruz. Parolayı her seferinde yazmak zorunda kalmamak için Parolayı Hatırla alanına bir onay işareti koyun ve Tamam'ı tıklayın.
  5. Bir sonraki pencerede apk dosyasının yolunu ve adını kontrol edin. Varsayılan olarak, modül adına eşittir. Dosyamızın optimize edilmesi için Run ProGuard onay kutusunu etkinleştiririz ve daha sıkı optimizasyon için proguard-android.txt yapılandırma dosyasını proguard-android-optimize.txt olarak bile değiştirebiliriz (ancak bu, bazı egzotik akıllı telefonlarla dolu olabilir). Durum çubuğuna bakarak Bitir'e tıklayın ve bekleyin.
  6. Projenin inşası bittiğinde, ortaya çıkan apk dosyasının bulunduğu klasörü açmanızı isteyen bir pencere açılacaktır. Açın ve dosyamıza bakın.

Hemen söyleyeceğim, Run ProGuard kutusunu işaretlememe rağmen, nedense benim için çalışmıyor ve apk dosyası optimize edilmemiş durumda. Belki bunlar Android Studio'nun önceki bir sürümünden kalanlardır ( 0.5.4 sürümüne sahibim). Ancak bu onay kutusunu doğrudan ProGuard yardımcı programının komut dosyasında etkinleştirerek durumdan çıkmak oldukça basittir. Modülümüzün içindeki proje penceresinde build.gradle dosyasını bulun. Sürümün oluşturulmasından sorumlu android → buildTypes → yayın bölümünde, runProguard parametresini false değerinden true değerine değiştirin.

Komut dosyasını düzenledikten sonra projenizi onunla senkronize etmeyi unutmayın. Bunu yapmak için, araç çubuğunda, Projeyi Gradle Dosyalarıyla Eşitle düğmesini (yeşil daireden aşağı ok) veya kaynağın üstünde açılan sarı mesaj çubuğunda Şimdi Eşitle bağlantısını tıklayın. Senkronizasyondan sonra, talimatlarımızın ikinci paragrafından başlayarak apk dosyasını tekrar oluşturmayı deneyebilirsiniz. Ancak bu sefer yeni bir depolama alanı oluşturmak yerine önceden oluşturulmuş olanı kullanıyoruz. Tüm şifrelerimiz ve ayarlarımız kaydedildi, bu yüzden tek yapmamız gereken açılır pencerelerde Tamam-Sonraki-Bitir'e tıklamak. Lütfen yeni oluşturulan apk dosyasının geçen seferden biraz daha küçük olduğunu unutmayın.

Otomatik yol

Otomatik yöntem, uygulama yürütme için her başlatıldığında parola girmeden bir apk dosyası oluşturmanıza ve ayrıca yapılandırma listesine eklenen ve aynı Çalıştır düğmesiyle yürütülen assembleRelease komutuna izin verir.

Otomatik modu etkinleştirmek için, build.gradle komut dosyasına zaten aşina olduğumuz, diğer şeylerin yanı sıra imza hakkında bilgiler içeren yeni bir bölüm eklememiz gerekiyor:


SigningConfigs ( sürüm ( storeFile file("C:\\Users\\UserName\\KEYSTORE.jks")) storePassword "StoragePassword" keyAlias ​​​​"SigningName" keyPassword "SigningPassword" ) buildTypes (sürüm ( minifyEnabled true signingConfigingConfigs getDefaultProguardFiles) (" proguard-android.txt"), "proguard-rules.pro") ) )

"proguard-android.txt" ayar dosyası yerine daha da optimize edilmiş ayarların dosyası olan "proguard-android-optimize.txt" dosyasını girebilirsiniz. Bu, apk dosyasının boyutunu daha da azaltacaktır.

Bu bölümü ayarlara eklemek için modülümüzün içinde bulunan build.gradle dosyasını açalım ve buildTypes bölümünü yorumlayalım. Bunun yerine, yukarıdaki bölümü ekleyin. Apk dosyasını manuel olarak oluştururken makalenin ilk bölümünde oluşturduğunuz anahtar dosyanızın yolunu değiştirmeyi ve ayrıca doğru imza adını ve her iki şifreyi de girmeyi unutmayın.

Dosyada değişiklik yaptıktan sonra, değiştirilen ayarları projeyle senkronize etmek için araç çubuğundaki (yeşil daireden aşağı ok) Projeyi Gradle Dosyalarıyla Eşitle düğmesini veya üstte açılan sarı bilgi çubuğundaki Şimdi Eşitle bağlantısını tıklayın. . İşte bu, otomatik mod ayarlandı!

Şimdi, uygulamayı başlatmadan bir apk dosyası oluşturabilmek için, konfigürasyonlar listesine (araç çubuğundaki açılır kutu) bir apk dosyası oluşturmaya başlamak için ayrı bir komut ekleyelim. Ekranın sağ kenarındaki Gradle simgesine tıklayarak veya Android Studio'nun sol alt köşesinde bulunan düğmenin açılır listesinden seçerek Gradle Tasks penceresini açın. Tüm görevler bölümünde, modülümüz için görevler listesini genişletin ve assembleRelease görevine sağ tıklayın. Görüntülenen bağlam menüsünde Oluştur… öğesini seçin ve seçilen görev yapılandırma listesine eklenecektir.

Artık, yapılandırma listesinden assembleRelease komutunu seçip Çalıştır düğmesine basarak, programı çalıştırmak için başlatmadan bir sürüm oluşturabiliriz. Apk dosyasının otomatik olarak oluşturulmasının sonucu build/apk/ klasöründe bulunacaktır. İki dosya olacak: ModuleName-release-unaligned.apk ve ModuleName-release.apk. İlk dosya yarı mamul bir üründür. Zaten imzalandı, ancak henüz uyumlu değil. İkinci dosya zaten hizalanmış. Bu, halihazırda yeniden adlandırabileceğimiz ve özgürce dağıtabildiğimiz son apk dosyamızdır.

Dosya hizalamanın, sıkıştırılmamış tüm verilerin dosyanın başlangıcından itibaren 4 baytın katı olan bir konumda başlamasını sağladığını unutmayın. Bu, programın cihazdaki performansını optimize edecektir. Dosya hizalandığında, Android, paketin tamamını belleğe yüklemek yerine gerektiğinde dosyadan bilgi okuyabilir. Sonuç olarak, çalışan uygulama tarafından tüketilen RAM miktarı azalır.

Yüklü eklentiler menüde dosya | ayarlar... | eklentiler. Buton Depolara göz atın... eklentiyi depoda bulmanızı sağlar. Buton Eklentiyi diskten yükleyin... Kendiniz indirdiyseniz, eklentiyi diskten yüklemenizi sağlar.

gökkuşağı parantez

"Gökkuşağı parantezleri", her bir parantez çiftini kendi rengiyle işaretlemenizi sağlar. Bu, kod alanının nerede olduğunu görsel olarak görmenize yardımcı olur.

Tüm stüdyo ilerleme çubuklarını sevimli bir kediyle değiştirir. Ciddi bir programcıysanız, o zaman sadece . Diğer IntelliJ IDEA tabanlı geliştirme ortamlarıyla uyumludur: PhpStorm, WebStorm, PyCharm, RubyMine, AppCode, CLion, Gogland, DataGrip, Rider, MPS.

Her yerde görünür. Örneğin, bir proje yüklerken.

Bir şeyi senkronize ederken çalışırken.

RoboPOJOluşturucu

JSON'dan hazır Java ve Kotlin POJO sınıflarının uygun bir üreticisi: GSON, FastJSON, AutoValue (GSON), Logan Square, Jackson.

adb fikirleri

Uygulamada hızlı işlemler için Android Studio/Intellij IDEA Eklentisi:

  • Uygulamayı Kaldır - uygulamayı cihazdan kaldırın
  • Uygulamayı Öldür - uygulamayı sonlandır (bellekten sil)
  • Uygulamayı Başlat - uygulamayı başlatın
  • Uygulamayı Yeniden Başlat - uygulamayı yeniden başlatın
  • Uygulama Verilerini Temizle - verileri temizle
  • Uygulama Verilerini Temizle ve Yeniden Başlat - verileri temizle ve yeniden başlat

Kurulduktan sonra, bu komutlar aracılığıyla bulunabilir. aletler | android | ADB FİKİRİ.

Eylem arama penceresini bir klavye kısayolu aracılığıyla da çağırabilirsiniz. Ctrl+Üst Karakter+A ve sembollerle adb hızlı bir şekilde belirli bir komutu bulun.

Eklenti, uygulamanın sağlığını farklı durumlarda kontrol etmek için uygundur. Örneğin, daha önce bir veritabanı oluşturdunuz ve uygulamanın boş bir veritabanı ile nasıl davrandığını görmeye karar verdiniz. Eklenti yardımı ile verileri hızlıca temizleyebilir ve sonuca bakabilirsiniz.

Eklentiler ve modüler uygulamalardan bahsettiğimizde öncelikle sıradan kullanıcı yazılımlarını kastediyoruz. Ancak modüler tasarım, rootkit'ler ve arka kapılar geliştirirken aynı derecede faydalı olabilir. Bu tür bir yazılımı güncellemek için geleneksel araçları kullanmak çok soluk ve her zaman mümkün değil, ancak ağ üzerinden yeni işlevselliğe sahip bir modülü sessizce yükleyebilirsiniz - hepsi bu. Ve temel işlevleri modüllere yerleştirir ve yükledikten hemen sonra silerseniz, ters çeviricinin ömrünü ciddi şekilde bozabilirsiniz.

Bir tanıtım yerine

Klasik Java, java.lang.ClassLoader adında bir sınıfa sahiptir. Görevi, uygulama yürütme sırasında sanal makineye belirtilen sınıfın (.class uzantılı bir dosya) bayt kodunu yüklemektir. Daha sonra bu sınıfın bir nesnesini oluşturabilir ve yansıma kullanarak yöntemlerini çağırabilirsiniz. Bu, genişletilebilir işlevsellik veya basitçe söylemek gerekirse eklenti desteği ile uygulamalar yazmak için kullanılabilecek kodu dinamik olarak yüklemenin bir yoludur.

Android'in bir Java Sanal Makinesi ve ClassLoader sınıfı yoktur, ancak karşılığı DexClassLoader tam olarak aynı şeyi yapar, ancak Dalvik bayt koduna (ve sırasıyla .class dosyaları yerine .dex dosyalarına) göre. Ve, istenen jar dosyasını CLASSPATH'e yerleştirmenin ve dinamik yüklemeyle uğraşmamanın daha kolay olduğu masaüstü Java'nın aksine, Android'de bu yaklaşım gerçekten birçok avantaj sağlar, bunlardan en önemlisi uygulamanın işlevselliğinin genişletilebilmesi ve kullanıcı fark etmeden ve ona hiçbir şey sormadan güncellenir. Uygulamanız herhangi bir zamanda sunucudan bir sınıf içeren bir dosya indirebilir, indirebilir ve ardından dosyayı silebilir.

Ayrıca sınıflar doğrudan APK paketinde saklanabilir ve uygulama başlangıç ​​zamanında yüklenebilir. Buradaki fayda, yüklenen sınıfların kodunun uygulamanın kendi kodundan ayrılacak ve APK'da "yanlış adreste" bulunacak olmasıdır; apktool gibi tersine çevirenlerin kullanmayı sevdiği araçlar onları görmez. Öte yandan, normal bir ters çevirici neyin ne olduğunu çabucak anlayacağından, bu daha kusursuzdur.

Bununla birlikte, dinamik sınıf yükleme, oldukça "beyaz" olmayan uygulamalar yazarken çok yararlı bir şeydir, bu nedenle herhangi bir güvenlik uzmanı bu mekanizmanın nasıl çalıştığını ve truva atlarında nasıl kullanıldığını bilmelidir.

En basit örnek

// Sınıfımızla jar arşivinin yolu String modFile = "/sdcard/myapp/module.jar"; // Uygulamanın özel dizininin yolu String appDir = getApplicationInfo().dataDir; // Dosyayı diskten yükle DexClassLoader classLoader = new DexClassLoader(modFile, appDir, null, getClass().getClassLoader()); // Sınıfı yükleyin, bir nesne oluşturun ve yansıma deneyini kullanarak run() yöntemini çağırmayı deneyin ( Class c = classLoader.loadClass("com.example.modules.simple.Module"); Method m = c.getMethod( "run", null); m.invoke(c.newInstance(), null); ) yakalama (İstisna e) ( e.printStackTrace(); )

Genel olarak, burada her şey basittir: kod, jar arşivini /sdcard/myapp/module.jar'ı sınıfımızla yükler, ondan com.example.modules.simple.Module sınıfını yükler, bir nesne oluşturur ve run() öğesini çağırır. yöntem. Üç noktaya dikkat edin:

  • DexClassLoader hem "basit" .dex dosyalarını hem de jar arşivlerini yükleyebilir, ikincisi sıkıştırma ve dijital imza kullanma yeteneği nedeniyle tercih edilir;
  • DexClassLoader yapıcısının ikinci argümanı, optimize edilmiş bayt kodunu (odex) depolamak için kullandığı dizindir, basitlik için uygulamanın kendisinin özel dizinini belirtiyoruz;
  • loadClass yöntemine bir argüman olarak, her zaman paketin adıyla birlikte sınıfın adresini de belirtmelisiniz.

Bu kodu çalışabilirlik açısından test etmek için basit bir modül oluşturalım:

Paket com.example.modules.simple.Module; android.util.Log'u içe aktar; public class Modül ( public void run() ( Log.d("Module", "Hayattayım!!!"); ) )

Android Studio'da yeni bir proje oluşturmak için zaman ayırın, bu kodu not defterine yazabilir ve komut satırından bir jar arşivinde derleyebilirsiniz:

Javac -classpath /path/to/sdk/platforms/android-23/android.jar Module.java /path/to/sdk/build-tools/23.0.3/dx --dex --output=module.jar Modülü. sınıf

Platformlar/android-23 ve build-tools/23.0.3 dizinlerinin mevcut olduğundan emin olun, sizin durumunuzda adları farklı olabilir.

Her şey yolunda giderse, bir module.jar dosyası elde etmelisiniz. Geriye sadece yükleyici kodunu uygulamaya eklemek, module.jar dosyasını bellek kartına koymak, uygulamayı oluşturmak ve çalıştırmak.

yansıma ile aşağı

Yansıtma iyi bir şeydir, ancak bu durumda sadece yoluna girer. Argümansız tek bir yöntemi çağırmak zor değil, ancak uygulamamızın birkaç parametre alan birçok yöntemle geliştirilmiş bir modül API'sine sahip olmasını istiyorsak, daha uygun bir şey bulmamız gerekiyor. Örneğin, her modülün uygulayacağı önceden tanımlanmış bir arabirim kullanın.

Bu yaklaşımı yukarıdaki örneğe uygulayarak aşağıdaki üç dosyayı elde ederiz:

  1. API açıklamalı ModuleInterface.java dosyası: paket com.example.modules; genel arabirim ModuleInterface ( public void run(); )
  2. Modülümüzün uygulanmasıyla Module.java dosyası: paket com.example.modules.simple.Module; android.util.Log'u içe aktar; public class Module, ModuleInterface'i uygular ( public void run() ( Log.d("Module", "Hayattayım!!!"); ) )
  3. Yeni modül yükleyici (uygulamanıza yerleştirin): String modFile = "/sdcard/myapp/module.jar"; String appDir = getApplicationInfo().dataDir; DexClassLoader classLoader = new DexClassLoader(modFile, appDir, null, getClass().getClassLoader()); // sınıfı yükleyin ve interface ModuleInterface ModuleInterface modülü ile bir nesne oluşturun; deneyin (Sınıfclass = classLoader.loadClass("com.example.modules.simple.Module"); modül = (ModuleInterface) class.newInstance(); ) yakalama (İstisna e) ( e.printStackTrace(); ) module.run()

Hepsi bu. Artık modül ile normal bir nesnede olduğu gibi çalışabiliriz. Ayrıca, yükleme aşamasında arayüzle uyumsuz olan modülleri (sınıfları) sistemin kendisi reddediyor, bu yüzden modülün ihtiyacımız olan yöntemi içerip içermediğini kendimize sormamıza gerek kalmıyor.

Birçok modül olduğunda

Bir modül bulduk, ama ya birçoğu varsa? Bu modüllerin kaydı nasıl tutulur ve aralarında kaybolmaz? Aslında, her şey basit - bunun için bir hashmap kullanabilirsiniz. Bootloader'ı tekrar değiştirelim:

Devamı sadece üyelere açıktır

Seçenek 1. Sitedeki tüm materyalleri okumak için "site" topluluğuna katılın

Belirtilen süre boyunca topluluğa üyelik, TÜM Hacker malzemelerine erişmenizi sağlayacak, kişisel kümülatif indiriminizi artıracak ve profesyonel bir Xakep Skoru puanı kazanmanıza izin verecektir!



Android Studio: Modül, "Yapılandırmayı Düzenle" (13) bölümünde görünmüyor

Bazen, çalıştırma/hata ayıklama yapılandırması yoluyla çapraz benzeri bir görüntü olması nedeniyle Android Manifest'te hatalar olabilir, bu nedenle bir durumda Android Manifest'te herhangi bir hata olup olmadığını görüntülemeye çalışın.

Birkaç alt projeyle bir projeyi Android Studio'ya aktardım.

Bir alt proje başlatmak istiyorum.

Başarıyla bir modül olarak build.gradle alt projelerini yaptım.

Çalıştırmak için Çalıştır > Konfigürasyonları Düzenle > Android Uygulamasına gittim.

Sorun. Bir modül seçmeye çalıştığımda hiçbiri açılır menüde görünmüyor.

Bu neden?

EDIT: Groovy altında bir modül olarak görünüyor, ancak bir Android uygulamasında görünmüyor. Android uygulamasında nasıl edinebilirim?

Android'e git >> Gradle Komut Dosyaları >> Gradle Oluştur (Modül: uygulama)

bu dosyanın ilk satırının böyle olduğundan emin olun.

Eklentiyi uygula: "com.android.library"

Benim için sadece Android Studio'yu yeniden başlatarak düzeltildi.. Tıpkı Eclipse'in eski güzel günleri gibi

Benim durumum için, bir acemi, projemi kükredi, nasıl olduğundan emin değilim, ama artık işe yaramayacak ve manifesto, R, her şeyden şikayet ettim. Ayarlarımdaki gibi bazılarını anladım. Gradle ":app" içermiyor sadece bunu ekledim, tekrar yola koyuldum.

Sonunda, AndroidTests için yapılandırmayı com.android.library modülüne eklediğimde modülün neden görünmediğini anladım.

Kütüphane modülünüzü uygulamanın build.gradle dosyasında build.gradle yaparsanız, şöyle:

Projeyi derleyin(":yourlibrary")

Bir kitaplık modülü varsayılan olarak yayın moduyla derlendiğinden, üzerinde Android Testleri çalıştıramazsınız, bu nedenle modül listesinde görünmez. Aşağıdaki değişiklikle düzelttim:

Aşağıdaki yapılandırmayı kitaplık modülünüzün build.gradle dosyasına ekleyin:

PublishNonDefault true

build.gradle değişiklikleri takiben, uygulama modülünüzün build.gradle dosyasını düzenleyerek kitaplığınızın derlemesinde hata ayıklayabilirsiniz, örneğin:

Projeyi derle(":kitaplığınız") + debugDerleme projesi(yol: ":kitaplığınız", yapılandırma: "hata ayıklama") + yayınDerleme projesi(yol: ":kitaplığınız", yapılandırma: "yayın")

Ardından senkronize edin ve listelendiğini göreceksiniz.

Projeyi kapattığım ve tekrar içe aktardığım için farklı çözümler, farkı olan insanlar için işe yarıyor gibi görünüyor.

Benzer bir sorun yaşadım, projemin ana dizinini seçtiğimde izin verdim Projeyi Kapat -> Android Studio'dan projeyi sil -> Projeyi İçe Aktar sağdaki dosyayı seçerek build.gradle .

İçe aktarma sırasında doğru build.gradle dosyasını seçtiğinizden emin olun.

Emin ol build.gradle

Eklentiyi uygula: "com.android.application"

Değiştirdikten sonra yeniden senkronize edin.

Bu, esas olarak bir kütüphane projesini kopyalarken ve inşa ederken olur. Çözüm eklemek olacaktır

Eklentiyi uygula: "com.android.application"

yerine build.gradle dosyasında

Eklentiyi uygula: "com.android.library"

Ardından bir degrade senkronizasyonu yapın

orderEntry type="library" exported="" name="appcompat-v7-19.1.0" level="project" />

Kenar ekleyerek düzelttim modül ayarları. Kayboldular. > modül ayarlarını aç > Sınırlar > Yüz ekle(+ işareti üstte)> Android. Yüzleri ekledikten sonra modülleriniz olacak.

GÜNCELLEME:

Gradle'ın en son sürümü için Yönler kaldırıldı, şimdi doğrudan modüller ekleyebilirsiniz. projeye sağ tıklayın > modül ayarlarını aç > Modül ekle("+" işaretinin üstünde)> Telefon ve Tablet uygulaması(şimdi yeni bir modül oluşturabilir ve özelleştirebilirsiniz).

modelinizi uygulamalarınıza ekleyin. iml dosyası gibi: orderEntry type="module" module-name="yourmoudlename" exported=""