react-native/local-cli/templates
Jamie Lynch c2fd54fcb2 Enable obfuscation in ProGuard rules by default
Summary:
This PR enables obfuscation in ProGuard by default when creating a new project, and documents how developers can turn obfuscation off if they desire.

The ProGuard phase is currently disabled by default. If a developer wanted to enable ProGuard, the first thing they would see is the following line in their build.gradle file: `def enableProguardInReleaseBuilds = false`

It's really easy to assume that enabling this flag will setup code shrinking and obfuscation, as this is the default behaviour for a completely native Android Studio project, or when running ProGuard from the command line directly.

However, the generated ProGuard rules override the default behaviour. Without visually inspecting the rules file, searching for a mapping file, or analyzing the Dex file classes, this isn't immediately obvious, as the APK will be smaller, and gradle will show the Proguard task as completing.

Personally I find this confusing and really wasn't expecting for obfuscation to be disabled - most Android Error Reporting services allow deobfuscation of stacktraces via mapping files.

1. Create a new project using `react-native init MyProject`
2. Observe that `-dontobfuscate` is commented out

[ANDROID] [MINOR] [ProGuard] - Enables obfuscation by default in newly created projects
Closes https://github.com/facebook/react-native/pull/17754

Differential Revision: D7251680

Pulled By: hramos

fbshipit-source-id: cf9ca7753640643377a51daa4fa9065516197340
2018-03-16 18:56:08 -07:00
..
HelloNavigation Update license headers for MIT license 2018-02-16 18:31:53 -08:00
HelloWorld Enable obfuscation in ProGuard rules by default 2018-03-16 18:56:08 -07:00
README.md CLI: Add basic Navigation template (Chat) 2017-02-02 03:28:35 -08:00

README.md

App templates

This folder contains basic app templates. These get expanded by 'react-native init' when creating a new app to make it easier for anyone to get started.

Chat Example

This is an example React Native app demonstrates ListViews, text input and navigation between a few screens.

screenshot 2017-01-13 17 24 37 screenshot 2017-01-13 17 24 40

Purpose

One problem with React Native is that it is not trivial to get started: react-native init creates a very simple app that renders some text. Everyone then has to figure out how to do very basic things such as adding a list of items fetched from a server, navigating to a screen when a list item is tapped, or handling text input.

This app is a template used by react-native init so it is easier for anyone to get up and running quickly by having an app with a few screens, a ListView and a TextInput that works well with the software keyboard.

Best practices

Another purpose of this app is to define best practices such as:

  • The folder structure of a standalone React Native app
  • A style guide for JavaScript and React - for this we use the AirBnb style guide
  • Naming conventions

We need your feedback to settle on a good set of best practices. Have you built React Native apps? If so, please use the issues in the repo mkonicek/ChatExample to discuss what you think are the best practices that this example should be using.

Running the app locally

cd ChatExample
yarn
react-native run-ios
react-native run-android

(In case you want to use react-navigation master):

# Install dependencies:
cd react-navigation
yarn
yarn pack --filename react-navigation-1.0.0-alpha.tgz
cd ChatExample
yarn
yarn add ~/code/react-navigation/react-navigation-1.0.0-alpha.tgz