diff --git a/.gitignore b/.gitignore
index 986db55f..000f857e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,6 +49,6 @@ local.properties
# fdroid
**/fastlane/repo/**
**/fastlane/tmp/**
-**/fastlane/iod-scan-apk.php
-**/fastlane/current_iod-scan-apk.php
-**/fastlane/current_result.json
+**/fastlane/izzyscript/iod-scan-apk.php
+**/fastlane/izzyscript/current_iod-scan-apk.php
+**/fastlane/izzyscript/current_result_*.json
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index acc77ce1..9018300c 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -65,6 +65,9 @@ platform :android do |options|
}
)
+ checkTrackingAddedInDependencyUsingIzzyScript(alpha:options[:alpha], beta:options[:beta], flavor: 'playstore')
+ checkTrackingAddedInDependencyUsingExodus(alpha:options[:alpha], beta:options[:beta], flavor: 'playstore')
+
upload_to_play_store(
track: deploy_target,
apk: lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH],
@@ -100,6 +103,9 @@ platform :android do |options|
}
)
+ checkTrackingAddedInDependencyUsingIzzyScript(alpha:options[:alpha], beta:options[:beta], flavor: 'apkstore')
+ checkTrackingAddedInDependencyUsingExodus(alpha:options[:alpha], beta:options[:beta], flavor: 'apkstore')
+
FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "release/Cryptomator-#{version}.apk")
server_host = ENV["APK_STORE_BASIC_URL"]
@@ -182,7 +188,8 @@ platform :android do |options|
}
)
- checkTrackingAddedInDependency(alpha:options[:alpha], beta:options[:beta])
+ checkTrackingAddedInDependencyUsingIzzyScript(alpha:options[:alpha], beta:options[:beta], flavor: 'fdroid')
+ checkTrackingAddedInDependencyUsingExodus(alpha:options[:alpha], beta:options[:beta], flavor: 'fdroid')
if options[:alpha] or options[:beta]
puts "Skipping deployment to F-Droid cause there isn't currently a alpha/beta channel"
@@ -213,44 +220,61 @@ platform :android do |options|
FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "release/Cryptomator-#{version}_fdroid_signed.apk")
end
- desc "Check if tracking added in some dependency"
- lane :checkTrackingAddedInDependency do |options|
+ desc "Check if tracking added in some dependency using Izzy's script"
+ lane :checkTrackingAddedInDependencyUsingIzzyScript do |options|
+ flavor = options[:flavor]
+
puts "Check if script file is latest"
- sh("wget -O current_iod-scan-apk.php https://gitlab.com/fdroid/issuebot/-/raw/master/modules/iod-scan-apk.php")
+ Dir.chdir("izzyscript") do
+ sh("wget -O current_iod-scan-apk.php https://gitlab.com/fdroid/issuebot/-/raw/master/modules/iod-scan-apk.php")
- same_script = FileUtils.compare_file("iod-scan-apk.php", "current_iod-scan-apk.php")
- if same_script
- puts "Script file unchanged"
- FileUtils.rm("current_iod-scan-apk.php")
- else
- UI.error("Script updated, check diff, download and save to iod-scan-apk.php")
- fail
+ same_script = FileUtils.compare_file("iod-scan-apk.php", "current_iod-scan-apk.php")
+ if same_script
+ puts "Script file unchanged"
+ FileUtils.rm("current_iod-scan-apk.php")
+ else
+ UI.error("Script updated, check diff, download and save to iod-scan-apk.php")
+ fail
+ end
+
+ FileUtils.mkdir("unsigned")
+
+ FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "unsigned/org.cryptomator_fdroid.apk")
+
+ sh("ISSUEBOT_CURRENT_APPLICATION_ID=org.cryptomator ISSUEBOT_CURRENT_REPLY_FILE=current_result_#{flavor}.json php iod-scan-apk.php")
+
+ # clean up
+ FileUtils.rm("libinfo.txt")
+ FileUtils.rm("libsmali.txt")
+ FileUtils.rm("org.cryptomator_fdroid.apk")
+ FileUtils.rm_r("unsigned")
+ FileUtils.rm_r("org.cryptomator_fdroid")
+
+ puts "Check if something changed in the APK regarding the dependencies"
+
+ report = JSON.parse(File.read("result_#{flavor}.json"))["report"]
+ current_report = JSON.parse(File.read("current_result_#{flavor}.json"))["report"]
+
+ if report.eql?(current_report)
+ puts "Dependencies unchanged"
+ FileUtils.rm("current_result_#{flavor}.json")
+ else
+ UI.error("Dependencies changed, check result of current_result.json, if no problem, move it to result.json, commit and retry")
+ fail
+ end
end
+ end
- FileUtils.mkdir("unsigned")
+ desc "Check if tracking added in some dependency using exodus"
+ lane :checkTrackingAddedInDependencyUsingExodus do |options|
+ FileUtils.mkdir("exodus-test")
- FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "unsigned/org.cryptomator_fdroid.apk")
+ FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "exodus-test/org.cryptomator.apk")
- sh("ISSUEBOT_CURRENT_APPLICATION_ID=org.cryptomator ISSUEBOT_CURRENT_REPLY_FILE=current_result.json php iod-scan-apk.php")
+ puts "Check if a tracking library was added"
+ sh("docker run -v $(pwd)/exodus-test/org.cryptomator.apk:/app.apk --rm -i exodusprivacy/exodus-standalone | tail -1 | grep -q 'Found trackers: 0'")
- # clean up
- FileUtils.rm("libinfo.txt")
- FileUtils.rm("libsmali.txt")
- FileUtils.rm_r("unsigned")
- FileUtils.rm_r("org.cryptomator_fdroid")
-
- puts "Check if something changed in the APK regarding the dependencies"
-
- report = JSON.parse(File.read("result.json"))["report"]
- current_report = JSON.parse(File.read("current_result.json"))["report"]
-
- if report.eql?(current_report)
- puts "Dependencies unchanged"
- FileUtils.rm("current_result.json")
- else
- UI.error("Dependencies changed, check result of current_result.json, if no problem, move it to result.json, commit and retry")
- fail
- end
+ FileUtils.rm_r("exodus-test")
end
desc "Create GitHub draft release"
diff --git a/fastlane/README.md b/fastlane/README.md
index bca77c73..5edd2012 100644
--- a/fastlane/README.md
+++ b/fastlane/README.md
@@ -41,11 +41,16 @@ Deploy new version to server
fastlane android deployToFDroid
```
Deploy new version to F-Droid
-### android checkTrackingAddedInDependency
+### android checkTrackingAddedInDependencyUsingIzzyScript
```
-fastlane android checkTrackingAddedInDependency
+fastlane android checkTrackingAddedInDependencyUsingIzzyScript
```
-Check if tracking added in some dependency
+Check if tracking added in some dependency using Izzy's script
+### android checkTrackingAddedInDependencyUsingExodus
+```
+fastlane android checkTrackingAddedInDependencyUsingExodus
+```
+Check if tracking added in some dependency using exodus
### android createGitHubDraftRelease
```
fastlane android createGitHubDraftRelease
diff --git a/fastlane/izzyscript/result_apkstore.json b/fastlane/izzyscript/result_apkstore.json
new file mode 100644
index 00000000..7ff782e7
--- /dev/null
+++ b/fastlane/izzyscript/result_apkstore.json
@@ -0,0 +1 @@
+{"applicationId":"org.cryptomator","emoji":[],"labels":["scanner-warning"],"report":"
APK library scanner
\nunsigned/org.cryptomator_fdroid.apk
\nOffending libs:
\n\n - Dropbox Core SDK for Java (/com/dropbox/core): NonFreeNet
\n - Google Mobile Services (/com/google/android/gms): NonFreeDep
\n - Google API Client Libraries (/com/google/api/client): NonFreeNet
\n - MSA Auth for Android (/com/microsoft/services/msa): NonFreeNet
\n - pCloud Java SDK (/com/pcloud/sdk): NonFreeNet
\n
\n5 offender(s). Full report available here. \n","reportData":{"unsigned/org.cryptomator_fdroid.apk":[{"id":"/android/support/v4","name":"Android Support v4","typ":"Development Framework","anti":""},{"id":"/androidx/activity","name":"AndroidX Activity","typ":"Utility","anti":""},{"id":"/androidx/annotation","name":"Android Jetpack Annotations","typ":"Utility","anti":""},{"id":"/androidx/arch","name":"Arch","typ":"Utility","anti":""},{"id":"/androidx/appcompat","name":"AppCompat","typ":"Utility","anti":""},{"id":"/androidx/biometric","name":"Biometric","typ":"Utility","anti":""},{"id":"/androidx/collection","name":"Android Support Library collections","typ":"Utility","anti":""},{"id":"/androidx/constraintlayout","name":"Constraint Layout Library","typ":"Utility","anti":""},{"id":"/androidx/core","name":"Androidx Core","typ":"Utility","anti":""},{"id":"/androidx/cursoradapter","name":"AndroidX Cursor Adapter","typ":"Utility","anti":""},{"id":"/androidx/documentfile","name":"Documentfile","typ":"UI Component","anti":""},{"id":"/androidx/exifinterface","name":"Exifinterface","typ":"Utility","anti":""},{"id":"/androidx/fragment/app","name":"Androidx Fragment","typ":"Development Aid","anti":""},{"id":"/androidx/legacy","name":"androidx.legacy","typ":"Utility","anti":""},{"id":"/androidx/lifecycle","name":"Lifecycle","typ":"Utility","anti":""},{"id":"/androidx/loader","name":"Loader","typ":"Utility","anti":""},{"id":"/androidx/localbroadcastmanager","name":"AndroidX Local Broadcast Manager","typ":"Utility","anti":""},{"id":"/androidx/preference","name":"Preference","typ":"Utility","anti":""},{"id":"/androidx/print","name":"Print","typ":"Utility","anti":""},{"id":"/androidx/savedstate","name":"Android Activity Saved State","typ":"Utility","anti":""},{"id":"/androidx/transition","name":"Transition","typ":"UI Component","anti":""},{"id":"/androidx/vectordrawable","name":"Vectordrawable","typ":"UI Component","anti":""},{"id":"/androidx/versionedparcelable","name":"Android Jetpack VersionedParcelable","typ":"Utility","anti":""},{"id":"/androidx/viewpager2","name":"AndroidX Widget ViewPager2","typ":"UI Component","anti":""},{"id":"/com/burgstaller/okhttp","name":"okhttp-digest","typ":"Utility","anti":""},{"id":"/com/davemorrissey/labs/subscaleview","name":"Subsampling Scale Image View","typ":"UI Component","anti":""},{"id":"/com/dropbox/core","name":"Dropbox Core SDK for Java","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/fasterxml","name":"Fasterxml","typ":"Utility","anti":""},{"id":"/com/google/android/gms","name":"Google Mobile Services","typ":"Development Framework","anti":"NonFreeDep"},{"id":"/com/google/android/material","name":"Google Material Design","typ":"Utility","anti":""},{"id":"/com/google/api/client","name":"Google API Client Libraries","typ":"Development Framework","anti":"NonFreeNet"},{"id":"/com/google/common","name":"Google Core Libraries for Java 6+","typ":"Utility","anti":""},{"id":"/com/google/errorprone","name":"Error Prone","typ":"Utility","anti":""},{"id":"/com/google/gson","name":"Google Gson","typ":"Utility","anti":""},{"id":"/com/google/j2objc","name":"J2ObjC","typ":"Utility","anti":""},{"id":"/com/jakewharton/rxbinding","name":"RxBinding","typ":"Utility","anti":""},{"id":"/com/microsoft/graph","name":"Microsoft Graph-SDK","typ":"Development Framework","anti":""},{"id":"/com/microsoft/services/msa","name":"MSA Auth for Android","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/nulabinc/zxcvbn","name":"zxcvbn4j","typ":"Utility","anti":""},{"id":"/com/pcloud/sdk","name":"pCloud Java SDK","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/simplecityapps/recyclerview_fastscroll","name":"RecyclerView-FastScroll","typ":"UI Component","anti":""},{"id":"/com/squareup/okhttp","name":"OkHttp","typ":"Utility","anti":""},{"id":"/com/tomclaw/cache","name":"Disk LRU Cache","typ":"Utility","anti":""},{"id":"/dagger","name":"Dagger","typ":"Utility","anti":""},{"id":"/io/jsonwebtoken","name":"Java JWT","typ":"Utility","anti":""},{"id":"/io/reactivex","name":"RxJava","typ":"Utility","anti":""},{"id":"/javax/annotation","name":"JavaX Annotation API","typ":"Utility","anti":""},{"id":"/javax/inject","name":"JavaX Dependency Injection","typ":"Utility","anti":""},{"id":"/kotlin","name":"Kotlin","typ":"Utility","anti":""},{"id":"/kotlinx/coroutines","name":"kotlinx.coroutines","typ":"Utility","anti":""},{"id":"/okio","name":"OkHttp okio Framework","typ":"Utility","anti":""},{"id":"/org/apache/commons","name":"Apache Commons","typ":"Development Framework","anti":""},{"id":"/org/apache/http","name":"Apache Http","typ":"Utility","anti":""},{"id":"/org/checkerframework","name":"Checker Framework","typ":"Utility","anti":""},{"id":"/org/greenrobot/greendao","name":"greenDAO","typ":"Utility","anti":""},{"id":"/org/intellij","name":"IntelliJ IDEA","typ":"Utility","anti":""},{"id":"/org/reactivestreams","name":"Reactive Streams","typ":"Utility","anti":""},{"id":"/org/simpleframework","name":"Simple","typ":"Utility","anti":""},{"id":"/org/slf4j","name":"Simple Logging Facade for Java","typ":"Utility","anti":""},{"id":"/timber/log","name":"Timber","typ":"Utility","anti":""}],"log":["Fetching library definitions from https://gitlab.com/IzzyOnDroid/repo/-/raw/master/lib","Loaded 2687 library definitions","Analyzing 'unsigned/org.cryptomator_fdroid.apk'...","Apktool returned: 0","Read 28256 bytes of smali path names from 'org.cryptomator_fdroid.dirlist'","Identified 60 libraries, 5 offenders.","Done analyzing 'unsigned/org.cryptomator_fdroid.apk'"],"self_url":"/artifacts/public/issuebot///iod-scan-apk.php.json"}}
\ No newline at end of file
diff --git a/fastlane/result.json b/fastlane/izzyscript/result_fdroid.json
similarity index 100%
rename from fastlane/result.json
rename to fastlane/izzyscript/result_fdroid.json
diff --git a/fastlane/izzyscript/result_playstore.json b/fastlane/izzyscript/result_playstore.json
new file mode 100644
index 00000000..7ff782e7
--- /dev/null
+++ b/fastlane/izzyscript/result_playstore.json
@@ -0,0 +1 @@
+{"applicationId":"org.cryptomator","emoji":[],"labels":["scanner-warning"],"report":"APK library scanner
\nunsigned/org.cryptomator_fdroid.apk
\nOffending libs:
\n\n - Dropbox Core SDK for Java (/com/dropbox/core): NonFreeNet
\n - Google Mobile Services (/com/google/android/gms): NonFreeDep
\n - Google API Client Libraries (/com/google/api/client): NonFreeNet
\n - MSA Auth for Android (/com/microsoft/services/msa): NonFreeNet
\n - pCloud Java SDK (/com/pcloud/sdk): NonFreeNet
\n
\n5 offender(s). Full report available here. \n","reportData":{"unsigned/org.cryptomator_fdroid.apk":[{"id":"/android/support/v4","name":"Android Support v4","typ":"Development Framework","anti":""},{"id":"/androidx/activity","name":"AndroidX Activity","typ":"Utility","anti":""},{"id":"/androidx/annotation","name":"Android Jetpack Annotations","typ":"Utility","anti":""},{"id":"/androidx/arch","name":"Arch","typ":"Utility","anti":""},{"id":"/androidx/appcompat","name":"AppCompat","typ":"Utility","anti":""},{"id":"/androidx/biometric","name":"Biometric","typ":"Utility","anti":""},{"id":"/androidx/collection","name":"Android Support Library collections","typ":"Utility","anti":""},{"id":"/androidx/constraintlayout","name":"Constraint Layout Library","typ":"Utility","anti":""},{"id":"/androidx/core","name":"Androidx Core","typ":"Utility","anti":""},{"id":"/androidx/cursoradapter","name":"AndroidX Cursor Adapter","typ":"Utility","anti":""},{"id":"/androidx/documentfile","name":"Documentfile","typ":"UI Component","anti":""},{"id":"/androidx/exifinterface","name":"Exifinterface","typ":"Utility","anti":""},{"id":"/androidx/fragment/app","name":"Androidx Fragment","typ":"Development Aid","anti":""},{"id":"/androidx/legacy","name":"androidx.legacy","typ":"Utility","anti":""},{"id":"/androidx/lifecycle","name":"Lifecycle","typ":"Utility","anti":""},{"id":"/androidx/loader","name":"Loader","typ":"Utility","anti":""},{"id":"/androidx/localbroadcastmanager","name":"AndroidX Local Broadcast Manager","typ":"Utility","anti":""},{"id":"/androidx/preference","name":"Preference","typ":"Utility","anti":""},{"id":"/androidx/print","name":"Print","typ":"Utility","anti":""},{"id":"/androidx/savedstate","name":"Android Activity Saved State","typ":"Utility","anti":""},{"id":"/androidx/transition","name":"Transition","typ":"UI Component","anti":""},{"id":"/androidx/vectordrawable","name":"Vectordrawable","typ":"UI Component","anti":""},{"id":"/androidx/versionedparcelable","name":"Android Jetpack VersionedParcelable","typ":"Utility","anti":""},{"id":"/androidx/viewpager2","name":"AndroidX Widget ViewPager2","typ":"UI Component","anti":""},{"id":"/com/burgstaller/okhttp","name":"okhttp-digest","typ":"Utility","anti":""},{"id":"/com/davemorrissey/labs/subscaleview","name":"Subsampling Scale Image View","typ":"UI Component","anti":""},{"id":"/com/dropbox/core","name":"Dropbox Core SDK for Java","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/fasterxml","name":"Fasterxml","typ":"Utility","anti":""},{"id":"/com/google/android/gms","name":"Google Mobile Services","typ":"Development Framework","anti":"NonFreeDep"},{"id":"/com/google/android/material","name":"Google Material Design","typ":"Utility","anti":""},{"id":"/com/google/api/client","name":"Google API Client Libraries","typ":"Development Framework","anti":"NonFreeNet"},{"id":"/com/google/common","name":"Google Core Libraries for Java 6+","typ":"Utility","anti":""},{"id":"/com/google/errorprone","name":"Error Prone","typ":"Utility","anti":""},{"id":"/com/google/gson","name":"Google Gson","typ":"Utility","anti":""},{"id":"/com/google/j2objc","name":"J2ObjC","typ":"Utility","anti":""},{"id":"/com/jakewharton/rxbinding","name":"RxBinding","typ":"Utility","anti":""},{"id":"/com/microsoft/graph","name":"Microsoft Graph-SDK","typ":"Development Framework","anti":""},{"id":"/com/microsoft/services/msa","name":"MSA Auth for Android","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/nulabinc/zxcvbn","name":"zxcvbn4j","typ":"Utility","anti":""},{"id":"/com/pcloud/sdk","name":"pCloud Java SDK","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/simplecityapps/recyclerview_fastscroll","name":"RecyclerView-FastScroll","typ":"UI Component","anti":""},{"id":"/com/squareup/okhttp","name":"OkHttp","typ":"Utility","anti":""},{"id":"/com/tomclaw/cache","name":"Disk LRU Cache","typ":"Utility","anti":""},{"id":"/dagger","name":"Dagger","typ":"Utility","anti":""},{"id":"/io/jsonwebtoken","name":"Java JWT","typ":"Utility","anti":""},{"id":"/io/reactivex","name":"RxJava","typ":"Utility","anti":""},{"id":"/javax/annotation","name":"JavaX Annotation API","typ":"Utility","anti":""},{"id":"/javax/inject","name":"JavaX Dependency Injection","typ":"Utility","anti":""},{"id":"/kotlin","name":"Kotlin","typ":"Utility","anti":""},{"id":"/kotlinx/coroutines","name":"kotlinx.coroutines","typ":"Utility","anti":""},{"id":"/okio","name":"OkHttp okio Framework","typ":"Utility","anti":""},{"id":"/org/apache/commons","name":"Apache Commons","typ":"Development Framework","anti":""},{"id":"/org/apache/http","name":"Apache Http","typ":"Utility","anti":""},{"id":"/org/checkerframework","name":"Checker Framework","typ":"Utility","anti":""},{"id":"/org/greenrobot/greendao","name":"greenDAO","typ":"Utility","anti":""},{"id":"/org/intellij","name":"IntelliJ IDEA","typ":"Utility","anti":""},{"id":"/org/reactivestreams","name":"Reactive Streams","typ":"Utility","anti":""},{"id":"/org/simpleframework","name":"Simple","typ":"Utility","anti":""},{"id":"/org/slf4j","name":"Simple Logging Facade for Java","typ":"Utility","anti":""},{"id":"/timber/log","name":"Timber","typ":"Utility","anti":""}],"log":["Fetching library definitions from https://gitlab.com/IzzyOnDroid/repo/-/raw/master/lib","Loaded 2687 library definitions","Analyzing 'unsigned/org.cryptomator_fdroid.apk'...","Apktool returned: 0","Read 28256 bytes of smali path names from 'org.cryptomator_fdroid.dirlist'","Identified 60 libraries, 5 offenders.","Done analyzing 'unsigned/org.cryptomator_fdroid.apk'"],"self_url":"/artifacts/public/issuebot///iod-scan-apk.php.json"}}
\ No newline at end of file