summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2019-12-11 16:57:26 -0800
committercyberta <cyberta@riseup.net>2019-12-11 16:57:26 -0800
commitd0d3f1b9d082308626c6a34d5b8d530de654ead4 (patch)
treea0af2806574961d1650c6c099db06f354eec5f68 /app
parent307d4398ca4bb341f44bc331abcdacb1fba46eb5 (diff)
parent938f54ffd546fb8372e65edfd5a4de0c6ca9a569 (diff)
Merge branch 'reduce_apk_size2' into 'master'
Reduce apk size See merge request leap/bitmask_android!95
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle174
-rw-r--r--app/src/custom/res/drawable-land/background_main.pngbin38813 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable-land/background_main.webpbin0 -> 10452 bytes
-rw-r--r--app/src/custom/res/drawable-land/ic_splash_background.pngbin60125 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable-land/ic_splash_background.webpbin0 -> 16928 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp-port/background_main.pngbin45747 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp-port/background_main.webpbin0 -> 12894 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp-port/ic_splash_background.pngbin74566 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp-port/ic_splash_background.webpbin0 -> 21606 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp/background_main.pngbin64577 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp/background_main.webpbin0 -> 17034 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp/ic_splash_background.pngbin86371 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable-sw600dp/ic_splash_background.webpbin0 -> 23410 bytes
-rw-r--r--app/src/custom/res/drawable/background_drawer.pngbin41536 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable/background_drawer.webpbin0 -> 16328 bytes
-rw-r--r--app/src/custom/res/drawable/background_main.pngbin45747 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable/background_main.webpbin0 -> 12894 bytes
-rw-r--r--app/src/custom/res/drawable/ic_splash_background.pngbin74566 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable/ic_splash_background.webpbin0 -> 21606 bytes
-rw-r--r--app/src/custom/res/drawable/logo_square.pngbin6141 -> 0 bytes
-rw-r--r--app/src/custom/res/drawable/logo_square.webpbin0 -> 1042 bytes
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/EipFragment.java37
22 files changed, 189 insertions, 22 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 7e4a6e03..0726cca8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -56,10 +56,11 @@ android {
}
}
- flavorDimensions "branding", "implementation"
+ flavorDimensions "branding", "implementation", "abi"
productFlavors {
productFlavors.all {
- ext.appName = null;
+ ext.appName = null
+ ext.splitApk = false
}
production {
dimension "implementation"
@@ -67,12 +68,13 @@ android {
insecure {
dimension "implementation"
}
+
normal {
dimension "branding"
appName = "Bitmask"
+ splitApk = true
}
-
custom {
dimension "branding"
@@ -106,10 +108,69 @@ android {
//The duration in days to trigger the donation reminder
buildConfigField 'int', 'donation_reminder_duration', '30'
+ // Build apks for each architecture, in addition to one 'fat' apk containing libraries for all all architectures
+ // enable this if you're publishing in gplay
+ ext {
+ splitApk = false
+ }
+
//**************************************************************************
//**************************************************************************
}
+
+
+ fat {
+ dimension "abi"
+ ext {
+ abiVersionCode = 0
+ abiFilter = ""
+ }
+ }
+
+ x86 {
+ dimension "abi"
+ ndk {
+ abiFilters "x86"
+ }
+ ext {
+ abiVersionCode = 1
+ abiFilter = "x86"
+ }
+ }
+
+ armv7 {
+ dimension "abi"
+ ndk {
+ abiFilters "armeabi-v7a"
+ }
+ ext {
+ abiVersionCode = 2
+ abiFilter = "armeabi-v7a"
+ }
+ }
+
+ x86_64 {
+ dimension "abi"
+ ndk {
+ abiFilters "x86_64"
+ }
+ ext {
+ abiVersionCode = 3
+ abiFilter = "x86_64"
+ }
+ }
+
+ arm64 {
+ dimension "abi"
+ ndk {
+ abiFilters "arm64-v8a"
+ }
+ ext {
+ abiVersionCode = 4
+ abiFilter = "arm64-v8a"
+ }
+ }
}
buildTypes {
@@ -120,6 +181,8 @@ android {
//runProguard true
if(signingConfigs.contains(release))
signingConfig signingConfigs.release.isSigningReady() ? signingConfigs.release : signingConfigs.debug
+ //minifyEnabled = true
+ //shrinkResources true
}
beta {
initWith release
@@ -159,8 +222,61 @@ android {
java.srcDirs += ['src/sharedTest/java']
}
}
+
+ /**
+ * BUILD VARAIANTS:
+ * =================
+ * Development builds:
+ * --------------------
+ * customProductionFatDebug -> branded development build, includes all ABIs
+ * normalProductionFatDebug -> Bitmask development build, includes all ABIS
+ * customInsecureFatDebug -> branded development build, doesn't checks certificates (for test server setup w/o valid certificates), includes all ABIs
+ * normalInsecureFatDebug -> Bitmask development build, doesn't checks certificates (for test server setup w/o valid certificates), includes all ABIs
+ *
+ * Branded Releases:
+ * -----------------
+ * customProductionFatBeta -> branded build, includes all ABI's, Beta release
+ * customProductionFatRelease -> branded build, includes all ABI's, stable release (-> F-Droid, GPlay if not splitApk is set to true)
+ *
+ * Bitmask Beta releases:
+ * ----------------------
+ * normalProductionArm64Beta -> Bitmask build, only for ABI arm64, for GPlay Beta channel with split apks (1 of 4)
+ * normalProductionArmv7Beta -> Bitmask build, only for ABI armeabi-v7a, for GPlay Beta channel with split apks (2 of 4)
+ * normalProductionX86Beta -> Bitmask build, only for ABI x86, for GPlay Beta channel with split apks (3 of 4)
+ * normalProductionX86_64Beta -> Bitmask build, only for ABI x86 64 bit, for GPlay Beta channel with split apks (4 of 4)
+ * normalProductionFatBeta -> Bitmask build, including all ABIS, for izzysoft's F-Droid repo and beta link on download page
+ *
+ * Bitmask Stable releases:
+ * ------------------------
+ * normalProductionArm64Release -> Bitmask build, only for ABI arm64, for GPlay releases with split apks (1 of 4)
+ * normalProductionArmv7Release -> Bitmask build, only for ABI armeabi-v7a, for GPlay releases with split apks (2 of 4)
+ * normalProductionX86Release -> Bitmask build, only for ABI x86, for GPlay releases with split apks (3 of 4)
+ * normalProductionX86_64Release -> Bitmask build, only for ABI x86 64 bit, for GPlay releases with split apks (4 of 4)
+ * normalProductionFatRelease -> Bitmask build, including all ABIS, for official F-Droid repo and stable link on download page
+ */
+
+ variantFilter { variant ->
+
+ def names = variant.flavors*.name
+ def buildTypeName = variant.buildType.name
+ // flavorDimensions "branding" -> 0, "implementation" -> 1, "abi" -> 2
+ def supportsSplitApk = variant.flavors[0].splitApk
+ // To check for a certain build type, use variant.buildType.name == "<buildType>"
+ if (((names.contains("insecure") && !names.contains("fat")) ||
+ (names.contains("insecure") && buildTypeName.contains("beta")) ||
+ (names.contains("insecure") && buildTypeName.contains("release")) ||
+ (buildTypeName.contains("debug") && !names.contains("fat")) ||
+ (!supportsSplitApk && !names.contains("fat")))
+ ) {
+ // Gradle ignores any variants that satisfy the conditions above.
+ setIgnore(true)
+ }
+ }
}
+
+
+
dependencies {
testImplementation 'junit:junit:4.12'
//outdated mockito-core version due to powermock dependency
@@ -205,11 +321,48 @@ dependencies {
}
android.applicationVariants.all { variant ->
+ // configure app name and apk file name for different build variants
def flavors = variant.productFlavors
- // flavorDimensions "branding" -> 0, "implementation" -> 1
+ // flavorDimensions "branding" -> 0, "implementation" -> 1, "abi" -> 2
def branding = flavors[0]
+ def trimmedAppName = branding.appName.replaceAll(' ', '')
+ def abiDimension = flavors[2]
+ def abiFilter = abiDimension.abiFilter
+ if (abiFilter.length() > 0) {
+ abiFilter = "_"+abiFilter
+ }
def buildType = variant.buildType
+ def tag = getTag()
+ if (tag.length() > 0) {
+ tag = "_"+tag
+ }
+
variant.resValue "string", "app_name", "\"${branding.appName}${buildType.appSuffix}\""
+
+ variant.outputs.all { output ->
+ output.outputFileName = "${trimmedAppName}${abiFilter}_${buildType.name}${tag}.apk"
+ }
+
+ // reconfigure version codes for split builds
+ variant.outputs.each { output ->
+ // if not a fat build
+ if (abiDimension.abiVersionCode > 0) {
+ output.versionCodeOverride = android.defaultConfig.versionCode * 1000 + abiDimension.abiVersionCode
+ }
+ }
+
+ // remove unrelated abi specific assets
+ variant.mergeAssets.doLast {
+ // if not a fat build
+ if (abiDimension.abiVersionCode > 0) {
+ def filesToDelete = fileTree(dir: variant.mergeAssets.outputDir, excludes: ["*pie_openvpn.${abiDimension.abiFilter}",
+ 'urls/',
+ '*.url',
+ '*.json',
+ '*.pem'])
+ delete(filesToDelete)
+ }
+ }
}
@@ -334,7 +487,7 @@ def removeDuplicatedStrings() {
def replaceDuplicatesForSource(File it, String type) {
def ics_openvpn_file = file(it.absolutePath.replace(type+'.xml', type+'-icsopenvpn.xml'))
if(ics_openvpn_file.exists()) {
- def ics_openvpn_strings_names = (new XmlParser()).parse(ics_openvpn_file)
+ def ics_openvpn_strings_names = new XmlParser().parse(ics_openvpn_file)
def current_file = it
ics_openvpn_strings_names.string.each {
@@ -381,11 +534,11 @@ task mergeUntranslatable(dependsOn: 'copyIcsOpenVPNFiles', type: Copy ) {
task copyIcsOpenVPNFiles(dependsOn: 'updateIcsOpenVpn') {
println "copyIcsOpenVPNFiles"
-/* copyIcsOpenVPNClasses
+ copyIcsOpenVPNClasses
copyIcsOpenVPNXml
copyIcsOpenVPNImages
//mergeUntranslatable.execute()
- removeDuplicatedStrings()*/
+ removeDuplicatedStrings()
}
task updateIcsOpenVpn( type: Exec ) {
@@ -394,6 +547,11 @@ task updateIcsOpenVpn( type: Exec ) {
}
+def getTag() {
+ String commit = "git log --pretty=format:'%h' -n 1".execute().text.trim().replaceAll("'", "")
+ return ("git describe --tags --exact-match "+ commit).execute().text.trim()
+}
+
task cleanNative( type: Delete ) {
def shouldClean = getCurrentFlavorForBetaOrRelease() == "production"
@@ -431,4 +589,4 @@ def getCurrentFlavorForBetaOrRelease() {
{
return "";
}
-} \ No newline at end of file
+}
diff --git a/app/src/custom/res/drawable-land/background_main.png b/app/src/custom/res/drawable-land/background_main.png
deleted file mode 100644
index ce11f5b4..00000000
--- a/app/src/custom/res/drawable-land/background_main.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable-land/background_main.webp b/app/src/custom/res/drawable-land/background_main.webp
new file mode 100644
index 00000000..c28c2183
--- /dev/null
+++ b/app/src/custom/res/drawable-land/background_main.webp
Binary files differ
diff --git a/app/src/custom/res/drawable-land/ic_splash_background.png b/app/src/custom/res/drawable-land/ic_splash_background.png
deleted file mode 100644
index 09103e4b..00000000
--- a/app/src/custom/res/drawable-land/ic_splash_background.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable-land/ic_splash_background.webp b/app/src/custom/res/drawable-land/ic_splash_background.webp
new file mode 100644
index 00000000..f939c114
--- /dev/null
+++ b/app/src/custom/res/drawable-land/ic_splash_background.webp
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp-port/background_main.png b/app/src/custom/res/drawable-sw600dp-port/background_main.png
deleted file mode 100644
index 23c7ffa6..00000000
--- a/app/src/custom/res/drawable-sw600dp-port/background_main.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp-port/background_main.webp b/app/src/custom/res/drawable-sw600dp-port/background_main.webp
new file mode 100644
index 00000000..6d23e9e1
--- /dev/null
+++ b/app/src/custom/res/drawable-sw600dp-port/background_main.webp
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp-port/ic_splash_background.png b/app/src/custom/res/drawable-sw600dp-port/ic_splash_background.png
deleted file mode 100644
index c5abd96a..00000000
--- a/app/src/custom/res/drawable-sw600dp-port/ic_splash_background.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp-port/ic_splash_background.webp b/app/src/custom/res/drawable-sw600dp-port/ic_splash_background.webp
new file mode 100644
index 00000000..227fcb24
--- /dev/null
+++ b/app/src/custom/res/drawable-sw600dp-port/ic_splash_background.webp
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp/background_main.png b/app/src/custom/res/drawable-sw600dp/background_main.png
deleted file mode 100644
index d11acde1..00000000
--- a/app/src/custom/res/drawable-sw600dp/background_main.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp/background_main.webp b/app/src/custom/res/drawable-sw600dp/background_main.webp
new file mode 100644
index 00000000..aa6b452b
--- /dev/null
+++ b/app/src/custom/res/drawable-sw600dp/background_main.webp
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp/ic_splash_background.png b/app/src/custom/res/drawable-sw600dp/ic_splash_background.png
deleted file mode 100644
index b3fb1f9c..00000000
--- a/app/src/custom/res/drawable-sw600dp/ic_splash_background.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable-sw600dp/ic_splash_background.webp b/app/src/custom/res/drawable-sw600dp/ic_splash_background.webp
new file mode 100644
index 00000000..f1a035ec
--- /dev/null
+++ b/app/src/custom/res/drawable-sw600dp/ic_splash_background.webp
Binary files differ
diff --git a/app/src/custom/res/drawable/background_drawer.png b/app/src/custom/res/drawable/background_drawer.png
deleted file mode 100644
index ed138c42..00000000
--- a/app/src/custom/res/drawable/background_drawer.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable/background_drawer.webp b/app/src/custom/res/drawable/background_drawer.webp
new file mode 100644
index 00000000..8e0c4a6f
--- /dev/null
+++ b/app/src/custom/res/drawable/background_drawer.webp
Binary files differ
diff --git a/app/src/custom/res/drawable/background_main.png b/app/src/custom/res/drawable/background_main.png
deleted file mode 100644
index 23c7ffa6..00000000
--- a/app/src/custom/res/drawable/background_main.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable/background_main.webp b/app/src/custom/res/drawable/background_main.webp
new file mode 100644
index 00000000..6d23e9e1
--- /dev/null
+++ b/app/src/custom/res/drawable/background_main.webp
Binary files differ
diff --git a/app/src/custom/res/drawable/ic_splash_background.png b/app/src/custom/res/drawable/ic_splash_background.png
deleted file mode 100644
index c5abd96a..00000000
--- a/app/src/custom/res/drawable/ic_splash_background.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable/ic_splash_background.webp b/app/src/custom/res/drawable/ic_splash_background.webp
new file mode 100644
index 00000000..227fcb24
--- /dev/null
+++ b/app/src/custom/res/drawable/ic_splash_background.webp
Binary files differ
diff --git a/app/src/custom/res/drawable/logo_square.png b/app/src/custom/res/drawable/logo_square.png
deleted file mode 100644
index d20cedd5..00000000
--- a/app/src/custom/res/drawable/logo_square.png
+++ /dev/null
Binary files differ
diff --git a/app/src/custom/res/drawable/logo_square.webp b/app/src/custom/res/drawable/logo_square.webp
new file mode 100644
index 00000000..cd3ad9d0
--- /dev/null
+++ b/app/src/custom/res/drawable/logo_square.webp
Binary files differ
diff --git a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java
index 0485e907..a6f8040f 100644
--- a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java
@@ -324,13 +324,17 @@ public class EipFragment extends Fragment implements Observer {
return;
}
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
- showPendingStartCancellation = true;
- alertDialog = alertBuilder.setTitle(activity.getString(R.string.eip_cancel_connect_title))
- .setMessage(activity.getString(R.string.eip_cancel_connect_text))
- .setPositiveButton((android.R.string.yes), (dialog, which) -> stopEipIfPossible())
- .setNegativeButton(activity.getString(android.R.string.no), (dialog, which) -> {
- }).setOnDismissListener(dialog -> showPendingStartCancellation = false).show();
+ try {
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
+ showPendingStartCancellation = true;
+ alertDialog = alertBuilder.setTitle(activity.getString(R.string.eip_cancel_connect_title))
+ .setMessage(activity.getString(R.string.eip_cancel_connect_text))
+ .setPositiveButton((android.R.string.yes), (dialog, which) -> stopEipIfPossible())
+ .setNegativeButton(activity.getString(android.R.string.no), (dialog, which) -> {
+ }).setOnDismissListener(dialog -> showPendingStartCancellation = false).show();
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ }
}
@@ -340,13 +344,18 @@ public class EipFragment extends Fragment implements Observer {
Log.e(TAG, "activity is null when asking to stop EIP");
return;
}
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity);
- showAskToStopEip = true;
- alertDialog = alertBuilder.setTitle(activity.getString(R.string.eip_cancel_connect_title))
- .setMessage(activity.getString(R.string.eip_warning_browser_inconsistency))
- .setPositiveButton((android.R.string.yes), (dialog, which) -> stopEipIfPossible())
- .setNegativeButton(activity.getString(android.R.string.no), (dialog, which) -> {
- }).setOnDismissListener(dialog -> showAskToStopEip = false).show();
+ try {
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity);
+ showAskToStopEip = true;
+ alertDialog = alertBuilder.setTitle(activity.getString(R.string.eip_cancel_connect_title))
+ .setMessage(activity.getString(R.string.eip_warning_browser_inconsistency))
+ .setPositiveButton((android.R.string.yes), (dialog, which) -> stopEipIfPossible())
+ .setNegativeButton(activity.getString(android.R.string.no), (dialog, which) -> {
+ }).setOnDismissListener(dialog -> showAskToStopEip = false).show();
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ }
+
}
@Override