[tor-commits] [orbot/master] add "minimal permission" build for SDK 16 to 22 devices

n8fr8 at torproject.org n8fr8 at torproject.org
Fri Jun 9 10:15:05 UTC 2017


commit 028f76e62ea31f44c68846ce6ec5296aae96823b
Author: Nathan Freitas <nathan at freitas.net>
Date:   Fri Jun 9 02:01:42 2017 -0400

    add "minimal permission" build for SDK 16 to 22 devices
    - these platforms don't allow for runtime permissions requests and the new permissions we are asking for can be alarming
    - we will disable the advanced hidden service features on these devices
---
 app/build.gradle                            |  13 ++-
 app/src/minimalperm/AndroidManifest.xml     | 165 ++++++++++++++++++++++++++++
 app/src/minimalperm/res/menu/orbot_main.xml |  80 ++++++++++++++
 3 files changed, 254 insertions(+), 4 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 38f2169..e21a302 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,26 +3,31 @@ apply plugin: 'com.android.application'
 android {
     compileSdkVersion 25
     buildToolsVersion "25"
-
     defaultConfig {
         applicationId "org.torproject.android"
-        minSdkVersion 16
+        minSdkVersion 23
         targetSdkVersion 25
     }
-
     lintOptions {
         checkReleaseBuilds false
         // Or, if you prefer, you can continue to check for errors in release builds,
         // but continue the build even when errors are found:
         abortOnError false
     }
-
     buildTypes {
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
         }
     }
+    productFlavors {
+        minimalperm {
+            minSdkVersion 16
+            applicationId 'org.torproject.android'
+            targetSdkVersion 22
+            maxSdkVersion 22
+        }
+    }
 }
 
 dependencies {
diff --git a/app/src/minimalperm/AndroidManifest.xml b/app/src/minimalperm/AndroidManifest.xml
new file mode 100644
index 0000000..523938a
--- /dev/null
+++ b/app/src/minimalperm/AndroidManifest.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.torproject.android"
+    android:installLocation="auto"
+    android:versionCode="15410000"
+    android:versionName="15.4.1-RC-1-multi">
+
+    <uses-sdk
+        android:minSdkVersion="16"
+        android:maxSdkVersion="22"
+        android:targetSdkVersion="22" />
+
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+    <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
+
+    <application
+        android:name=".OrbotApp"
+        android:allowBackup="false"
+        android:allowClearUserData="true"
+        android:configChanges="locale|orientation|screenSize"
+        android:description="@string/app_description"
+        android:hardwareAccelerated="false"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:largeHeap="false"
+        android:theme="@style/DefaultTheme">
+        <activity
+            android:name=".OrbotMainActivity"
+            android:excludeFromRecents="true"
+            android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+
+                <data android:scheme="bridge" />
+            </intent-filter>
+            <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+
+                <action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+            <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+
+                <action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+
+		<!--         This is for ensuring the background service still runs when/if the app is swiped away -->
+        <activity
+            android:name=".service.util.DummyActivity"
+            android:allowTaskReparenting="true"
+            android:alwaysRetainTaskState="false"
+            android:clearTaskOnLaunch="true"
+            android:enabled="true"
+            android:excludeFromRecents="true"
+            android:finishOnTaskLaunch="true"
+            android:noHistory="true"
+            android:stateNotNeeded="true"
+            android:theme="@android:style/Theme.Translucent" />
+        <activity
+            android:name=".vpn.VPNEnableActivity"
+            android:exported="false"
+            android:label="@string/app_name" />
+        <activity
+            android:name=".ui.PromoAppsActivity"
+            android:exported="false" />
+        <activity
+            android:name=".settings.SettingsPreferences"
+            android:label="@string/app_name" />
+        <activity
+            android:name=".ui.AppManager"
+            android:label="@string/app_name"
+            android:theme="@style/Theme.AppCompat" />
+
+        <service
+            android:name=".service.TorService"
+            android:enabled="true"
+            android:permission="android.permission.BIND_VPN_SERVICE"
+            android:stopWithTask="false"></service>
+        <service
+            android:name=".service.vpn.TorVpnService"
+            android:enabled="true"
+            android:permission="android.permission.BIND_VPN_SERVICE">
+            <intent-filter>
+                <action android:name="android.net.VpnService" />
+            </intent-filter>
+        </service>
+
+        <receiver
+            android:name=".service.StartTorReceiver"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="org.torproject.android.intent.action.START" />
+            </intent-filter>
+        </receiver>
+        <receiver
+            android:name=".OnBootReceiver"
+            android:enabled="true"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
+
+                <category android:name="android.intent.category.HOME" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
+
+                <category android:name="android.intent.category.HOME" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.MEDIA_MOUNTED" />
+
+                <category android:name="android.intent.category.HOME" />
+            </intent-filter>
+        </receiver>
+
+        <activity
+            android:name=".ui.hiddenservices.HiddenServicesActivity"
+            android:label="@string/title_activity_hidden_services"
+            android:theme="@style/DefaultTheme">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".OrbotMainActivity" />
+        </activity>
+
+        <provider
+            android:name=".ui.hiddenservices.providers.HSContentProvider"
+            android:authorities="org.torproject.android.ui.hiddenservices.providers"
+            android:exported="false" />
+        <provider
+            android:name="android.support.v4.content.FileProvider"
+            android:authorities="org.torproject.android.ui.hiddenservices.storage"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/hidden_services_paths" />
+        </provider>
+
+        <activity
+            android:name=".ui.hiddenservices.ClientCookiesActivity"
+            android:label="@string/client_cookies"
+            android:theme="@style/DefaultTheme">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".OrbotMainActivity" />
+        </activity>
+
+        <provider
+            android:name=".ui.hiddenservices.providers.CookieContentProvider"
+            android:authorities="org.torproject.android.ui.hiddenservices.providers.cookie"
+            android:exported="false" />
+    </application>
+
+</manifest>
diff --git a/app/src/minimalperm/res/menu/orbot_main.xml b/app/src/minimalperm/res/menu/orbot_main.xml
new file mode 100644
index 0000000..6685baa
--- /dev/null
+++ b/app/src/minimalperm/res/menu/orbot_main.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2008 Esmertec AG.
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:yourapp="http://schemas.android.com/apk/res-auto"
+    >
+
+ <item android:id="@+id/menu_settings"
+        android:title="@string/menu_settings"
+         android:icon="@drawable/ic_action_settings"
+         yourapp:showAsAction="never"
+         />
+
+ <item
+        android:title="@string/menu_qr"
+     yourapp:showAsAction="never"
+         >
+  <menu>
+  <item android:id="@+id/menu_scan"
+        android:title="@string/menu_scan"
+      yourapp:showAsAction="never"
+         />
+  
+  <item android:id="@+id/menu_share_bridge"
+        android:title="@string/menu_share_bridge"
+      yourapp:showAsAction="never"
+         />
+  </menu>
+ </item>
+
+    <!--
+    <item
+        android:title="@string/menu_hidden_services"
+        yourapp:showAsAction="never"
+        >
+      <menu>
+        <item android:id="@+id/menu_hidden_services"
+              android:title="@string/hosted_services"
+            yourapp:showAsAction="never"
+               />
+
+        <item android:id="@+id/menu_client_cookies"
+              android:title="@string/client_cookies"
+            yourapp:showAsAction="never"
+               />
+      </menu>
+    </item>
+        -->
+ 
+  <item android:id="@+id/menu_about"
+        android:title="@string/menu_about"
+         android:icon="@drawable/ic_menu_about"
+      yourapp:showAsAction="never"
+         
+         />
+ 
+  <item android:id="@+id/menu_exit"
+        android:title="@string/menu_exit"
+         android:icon="@drawable/ic_menu_exit"
+      yourapp:showAsAction="never"
+         
+         />
+ 
+</menu>





More information about the tor-commits mailing list