Uwzględniam prostą aplikację, reagując natywne. Po zakończeniu wdrażania teraz chcę wydać APK tak, aby zgodnie z jego Oficjalna strona utworzyłem klucz:

"C:\Program Files\Java\jdk1.8.0_162\bin\keytool.exe" -genkeypair -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

I dodałem:

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=mypass
MYAPP_UPLOAD_KEY_PASSWORD=mypass

Do pliku android/gradle.properties i na koniec dodałem release część w sekcji signingConfigs w android/app/build.gradle:

signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
     release {
        if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
            storeFile file(MYAPP_UPLOAD_STORE_FILE)
            storePassword MYAPP_UPLOAD_STORE_PASSWORD
            keyAlias MYAPP_UPLOAD_KEY_ALIAS
            keyPassword MYAPP_UPLOAD_KEY_PASSWORD
        }
    }
}

I dodałem ten znak konfiguracji do buildTypes część:

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release
    }
}

Ale po uruchomieniu \android> ./gradlew bundleRelease:

PS F:\SafaProject\ReactNative\RNAuditMngm\android> ./gradlew bundleRelease

> Task :app:bundleReleaseJsAndAssets
warning: the transform cache was reset.
Loading dependency graph, done.
info Writing bundle output to:, F:\SafaProject\ReactNative\RNAuditMngm\android\app\build\generated\assets\react\release\index.android.bundle
info Writing sourcemap output to:, F:\SafaProject\ReactNative\RNAuditMngm\android\app\build\generated\sourcemaps\react\release\index.android.bundle.map
info Done writing bundle output   
info Done writing sourcemap output
info Copying 13 asset files
info Done copying assets

> Task :react-native-gesture-handler:compileReleaseJavaWithJavac
Note: F:\SafaProject\ReactNative\RNAuditMngm\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerButtonViewManager.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

> Task :react-native-reanimated:compileReleaseJavaWithJavac
Note: F:\SafaProject\ReactNative\RNAuditMngm\node_modules\react-native-reanimated\android\src\main\java\com\swmansion\reanimated\NodesManager.java uses or overrides a deprecated 
API.
Note: Recompile with -Xlint:deprecation for details.
Note: F:\SafaProject\ReactNative\RNAuditMngm\node_modules\react-native-reanimated\android\src\main\java\com\swmansion\reanimated\NodesManager.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.5/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 54s
88 actionable tasks: 84 executed, 4 up-to-date
PS F:\SafaProject\ReactNative\RNAuditMngm\android> 

Po prostu tworzy plik app.aab w folderze \app\build\outputs\bundle\release?

Jak mogę utworzyć plik APK?

Jest to kompletna aplikacja Build.gradle

3
sayres kabir 30 grudzień 2019, 12:14

2 odpowiedzi

Najlepsza odpowiedź

Jeśli chcesz utworzyć .apk, a następnie uruchom polecenie:

CD Android.

./gradlewsemblelease.

Generuje tutaj APK:

Android / App / Build / Wyjście / APK / Release / App-Release.apk

Jeśli chcesz wygenerować pakiet (.Aab), aby przesłać do Play Store:

CD Android.

./Gradlew Bundlerease.

6
Community 20 czerwiec 2020, 09:12

W ten sposób generuję podpisany apk.

Pokażę też, jak bezpiecznie załadować zmienne na temat gradele, aby projekt mógł być bezpiecznie popychany do Git bez odsłonięcia haseł (coś, co jest drażniowo nieobjęte samouczkami).

1. Wygeneruj klucz do przesyłania.

Możesz wygenerować prywatny klucz podpisujący za pomocą KeyTool. W systemie Windows KeyTool musi być uruchamiany z C: Program Program Pliki Java \ jdkx.x.x_x \ bin.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

To polecenie wyświetla monit o hasła dla klucza kluczowego i klucza oraz dla pola wyróżniającego nazwę dla klucza. Następnie generuje klucz Keystore jako plik o nazwie My-Upload-Key.keyStore.

Keystore zawiera jeden klucz, ważny przez 10000 dni.

2. Konfigurowanie zmiennych gradele i bezpiecznie je ładowanie

Umieść plik My-Upload-key.keystore w katalogu Android / App w folderze projektu.

Utwórz nowy plik w folderze Android: Android / Keystore.properties i dodaj następujące elementy (ale oczywiście z własnymi hasłami).

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=YOUR_PASSWORD_HERE
MYAPP_UPLOAD_KEY_PASSWORD=YOUR_PASSWORD_HERE

Następnie dodaj ten nowy plik do .giTignore, dzięki czemu można bezpiecznie naciskać do Githuba bez odsłonięcia zmiennych:

keystore.properties

Następnie zmodyfikuj kod Android / App / Cold.gradle, aby załadować w właściwościach kluczy:

// Load keystore
def keystorePropertiesFile = rootProject.file("keystore.properties");
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

// ...

android{

    // ...

 signingConfigs {
        release {
            if ( keystorePropertiesFile.exists() ) {
                storeFile file(keystoreProperties['MYAPP_UPLOAD_STORE_FILE'])
                storePassword keystoreProperties['MYAPP_UPLOAD_STORE_PASSWORD']
                keyAlias keystoreProperties['MYAPP_UPLOAD_KEY_ALIAS']
                keyPassword keystoreProperties['MYAPP_UPLOAD_KEY_PASSWORD']
            }

        }
  }
    buildTypes {
        release {
            // ...
            signingConfig signingConfigs.release
        }
    }

    // ...
}

Robiąc to w ten sposób zapewnia, że projekt nadal będzie działał, jeśli ktoś inny kloni z Git bez pliku KeyStore.properties - idealny.

3. Wygeneruj ręcznie plik pakietowy z systemem Android

Usuń bieżący indeks.Android.bundle Plik:

rm android/app/src/main/assets/index.android.bundle

Jeśli nie istnieje taki plik, otrzymasz komunikat "Brak takiego pliku lub katalogu".

Następnie wygeneruj wiązkę Android, zwróć uwagę na poniższe polecenie:

npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

Prawdopodobnie otrzymasz błąd "zduplikowanych zasobów" (przynajmniej ja zawsze robię). Przejdź do / Android / App / SRC / Folder Main / RES i usuń wszelkie pliki, które zaczynają się od "szafy".

4. Wygeneruj podpisany z systemem Android Build APK

Przejdź do folderu na Androida:

cd android

I uruchom następujące polecenie, aby wygenerować wydanie APK:

./gradlew clean && ./gradlew assembleRelease

Jeśli jakieś błędy, usuń Android / .gradle i Androida / App / Build / Retry.

Twój podpisany apk powinien być teraz umieszczony na Androida / App / Build / Wyjścia / APK / App-Release.apk.

Gdy twoja kompilacja odniosła sukces, z folderu roota projektu Uruchom poniżej polecenia, aby przetestować aplikację w urządzeniu:

npx react-native run-android --variant=release

Jeśli masz jakieś problemy, spróbuj przed ponownym wykonaniem powyższych kroków:

  • Upewnij się, że odinstaluj starą aplikację na emulatorze / telefonie.
  • Usuń stary folder Android / .gradle i Android / App / Build.
  • Pamięć podręczna NPM czysty -force.
  • Usuń i zainstaluj ponownie Node_modules.

Napisałem tę odpowiedź jako Artykuł dla mojego własnego przyszłego odniesienia, ale poczuj się swobodnie Dodaj do ulubionych :)

1
Danny Adams 18 kwiecień 2021, 13:54