How to ensure a file exists on assets folder at build time? - android

I have a JSON file db_seed.json that I want to use as a seed to pre-populate local database in my Android application. This JSON file is dynamically generated from another data source and quite big in size, so I don't want to include this in version control.
However, each time I build the application, I want to make sure that the build process check the existence of this file in the assets folder and shout a build error if it's not (to make sure that I don't publish an incomplete APK). Is it possible to configure Gradle in Android Studio to do this?

try this
if (!file('./app/assets/db_seed.json').exists()) {
logger.log(LogLevel.ERROR, "file not foun")
throw new GradleException("file not found")
}

Related

Failed to read Firebase options from the app's resources

I get the error Failed to read Firebase options from the app's resources. Either make sure google-services.json is included in your build or specify options explicitly.
When building the unity game to android, even though it works in the editor.
I have tried all the solutions of previous questions. Notably, I don't have a mainTemplate.gradle file, and inside /Plugins/Android I don't have a firebase folder. I am using the .net framework, and I enabled arm64. I also have the googleservices.json both in the assets folder and streamingassets folder. Are there any other solutions? Thanks!
When you want to build to an android project, you need to have a keystore file and I didn't have one. Here is a link to explain how to create the keystore file:
https://github.com/firebase/quickstart-unity/tree/master/database/testapp

Overwrite of asset file when upgrading app

I'm stucked on a weird problem.
I have a xml config file in my project to which I added two values. This XML file is stored in .\assets\internal\ which refers to data\data\<Application ID>\files . This file is, as all my other project's files, stated as "Always Replaced" (seen from Project, Deployment).
The thing is when I upgrade a previous version of the app not containing these two new values to the new app, the XML file is not upgraded to the one in the new APK, and leads to bugs in my app.
I've seen some other people with this problem but I get other errors.
Android Asset file not upgraded on app upgrade
I get File not found error by trying to open SharedActivityContext()->getAssets()->open('config.xml'); though the file is stored in .\assets\internal\... (accessed by IOUtils::TPath::GetDocumentsPath() + PathDelim + "config.xml" in my code).
I get all the same errors by storing the file in .\assets\, which stores it in the external storage + I don't find a way to get a path from TPath to this external storage so I have to write the path in my code.
That said, I have no errors when I fresh install my app by deleting the previous version, but I can't do that to all my devices.
How can I upgrade an asset file (EDIT : with c++ Builder) ? Or should I store it in res\raw to get it upgraded at every app upgrade ?

Gradle build failing due to keystore.properties file missing

I'm trying to use this alarm app on Android Studio - https://github.com/philliphsu/ClockPlus . However, gradle build is failing (error message below). Please let me know what needs to be fixed for this to work.
Error:/Users/***/Documents/Apps/ClockPlus-master/keystore.properties (No such file or directory). Let me know what exactly is this keystore.properties and is it possible to create this file as it's not available in the github repo files.
what exactly is this keystore.properties?
When you want to publish your app in the google play, you need to sign your app. When you create a signing configuration,Android Studio ,by default, adds your signing information in plain text to the module's build.gradle files. If you are working with a team or open-sourcing your code, you should move this sensitive information out of the build files so it is not easily accessible to others. To do this, you should create a separate properties file to store secure information and refer to that file in your build files. That file is the keystore properties file.
Read more about this
Is it possible to create this file as it's not available in the github
repo files?
Create a file named keystore.properties in the root directory of your project. This file should contain your signing information, as follows:
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation
If you do not have store password, key password etc. you should sign your app.
Read more about this
The whole information about this is in the Android Developer documentation, in the link I provided above.

Difficulties setting up Gradle to send ProGuard mapping files to Firebase

I am trying to follow this documentation tutorial by Firebase to setup Android Studio to automatically send my ProGuard mappings file when building a release APK for my Android application.
However, I couldn't seem to understand steps 4 and 5 in the "Uploading ProGuard mapping files with Gradle" part, mainly because I didn't find any gradle.properties file in my project root or home path and because I wish to automate the execution of the app:firebaseUploadReleaseProguardMapping task in Android Studio, which I don't know how to do.
This is the contents of the gradle.properties file I've created in my project root directory:
FirebaseServiceAccountFilePath = /app/firebase-crash-reporting.json
The firebase-crash-reporting.json file is my Firebase crash reporting private key. My mappings file is generated in the /app/build/outputs/mapping/release/ directory, if that helps.
Please assist me in completing those 2 steps and automatizing the process in Android Studio.
Just add
afterEvaluate {
assembleRelease.doLast {
firebaseUploadReleaseProguardMapping.execute()
}
}
In the android section of build.gradle file.
This will automatically upload the ProGuard mappings file to Firebase as well as run/deploy the APK to the device using ADB.
gradle.properties is owned and managed completely by you. You have to create it if it doesn't already exist. This means you should probably read the Gradle documentation on it to best understand how it provides properties to your builds, and which location is best for your properties.
You are not even obliged to use gradle.properties. You can also specify all the properties for the Crash Reporting plugin via the command line.
When you specify a path for the service account file, you should specify the full, unambiguous path to the file. In your example, it looks like you're assuming that it will look under the app directory in your project. If you want to do that, you still have to give the full path to the file.

Android - add files into APK package?

is it possible to add to my apk file some XML file storing program version, update path and other useful data (note: I don't mean Android XML file). All I want to is this file to be unpacked somewhere to local data folder and I will use it for comparing version info installed locally and on the server in case of updates.
I am asking - is it possible to add to apk some other file?
Thanks
The assets/ folder in apk is intended to store any extra user files in any formats. They will be included to apk automatically on compilation stage and can be accessed from the app using getAssets() function. For example:
final InputStream is = getResources().getAssets().open("some_file.xml")
It is even unnecessary to copy them to some local folder to read them.
If you only want to know the version info of the app then there is a much easier way to identify it. You can use
getPackageManager().getPackageInfo(getPackageName(),PackageManager.COMPONENT_ENABLED_STATE_DEFAULT).versionCode
to get the version code and
getPackageManager().getPackageInfo(getPackageName(),PackageManager.COMPONENT_ENABLED_STATE_DEFAULT).versionName
to get app's version name

Categories

Resources