Created
April 16, 2019 09:43
-
-
Save ok3141/873ca5072a2f43dd32deb345af4453e6 to your computer and use it in GitHub Desktop.
Solution which helps to avoid crashes of sideloaded APK generated from AAB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.annotation.SuppressLint; | |
import android.app.Activity; | |
import android.content.Intent; | |
import android.content.res.Resources; | |
import android.net.Uri; | |
import android.os.Bundle; | |
import android.support.annotation.NonNull; | |
import android.util.TypedValue; | |
import android.view.Gravity; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.Button; | |
import android.widget.LinearLayout; | |
import android.widget.Space; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
public class DrawablesValidator extends Activity { | |
public static void ensureDrawablesValid(@NonNull Activity activity) { | |
try { | |
// IMPORTANT create 1x1 image named pixel.png and put it to all folders | |
// drawable-mdpi | |
// drawable-hdpi | |
// drawable-xhdpi | |
// drawable-xxhdpi | |
// drawable-xxxhdpi | |
activity.getDrawable(R.drawable.pixel); | |
} catch (Resources.NotFoundException ex) { | |
// NOTE optionally, report exception to Crashlytics or just an event to Analytics | |
activity.finish(); | |
activity.startActivity(new Intent(activity, DrawablesValidator.class)); | |
} | |
} | |
// NOTE don't care about translations of text messages here, don't put them to strings.xml | |
// we assume, that if user is smart enough to get APK from outside and install it, | |
// then user will definitely understand few messages in English :) | |
@SuppressLint("SetTextI18n") | |
@Override | |
protected void onCreate(Bundle state) { | |
super.onCreate(state); | |
int dp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics()); | |
int dp8 = dp * 8; | |
int dp16 = dp * 16; | |
int dp80 = dp * 80; | |
LinearLayout root = new LinearLayout(this); | |
root.setOrientation(LinearLayout.VERTICAL); | |
root.setGravity(Gravity.CENTER_HORIZONTAL); | |
root.setPadding(dp80, dp16, dp80, dp16); | |
Space spaceTop = new Space(this); | |
TextView title = new TextView(this); | |
title.setPadding(0, dp8, 0, dp8); | |
title.setTextSize(20); | |
title.setText("Re-install app"); | |
TextView message = new TextView(this); | |
message.setPadding(0, dp8, 0, dp8); | |
message.setTextSize(16); | |
message.setText("This copy of app is corrupted and can't be launched." + | |
"\n\n" + | |
"Please, install original version from Google Play"); | |
Button button = new Button(this); | |
button.setPadding(dp16, dp8, dp16, dp8); | |
button.setText("Continue"); | |
button.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
try { | |
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()))); | |
} catch (Exception ex) { | |
Toast.makeText(getApplicationContext(), "Can't open Google Play", Toast.LENGTH_SHORT).show(); | |
} | |
} | |
}); | |
Space spaceBottom = new Space(this); | |
int wc = ViewGroup.LayoutParams.WRAP_CONTENT; | |
int mp = ViewGroup.LayoutParams.MATCH_PARENT; | |
root.addView(spaceTop, lp(0, 0, 1, -1)); | |
root.addView(title, lp(wc, wc, 0, -1)); | |
root.addView(message, lp(mp, wc, 0, -1)); | |
root.addView(button, lp(wc, wc, 0, Gravity.END)); | |
root.addView(spaceBottom, lp(mp, wc, 1, -1)); | |
setContentView(root); | |
} | |
private LinearLayout.LayoutParams lp(int width, int height, int weight, int gravity) { | |
LinearLayout.LayoutParams result = new LinearLayout.LayoutParams(width, height); | |
result.weight = weight; | |
result.gravity = gravity; | |
return result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment