Flipfont app für galaxy-Handys

Ich will eine app machen, die kann ändern system-schriftart-style-galaxy-Handy nach der Installation von meinem app-Benutzer können die schriftart ändern, die von der Einstellung>mein Gerät >Schriftstil, und wählen Sie aus der Liste, ohne dass root-Berechtigung. Ich habe meine eigene schriftart in true-type-Datei.
Klicken Sie auf hier, um zu sehen, Beispiel der app, die ich machen will.

Down-Voting wird nicht helfen, Bitte Antwort oder nicht niederstimmen.

Flipfont app für galaxy-Handys

Flipfont app für galaxy-Handys

Flipfont app für galaxy-Handys

manidest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2" android:versionName="1.1" package="com.monotype.android.font.presentltroman" platformBuildVersionCode="23" platformBuildVersionName="6.0-2438415">
    <uses-sdk android:minSdkVersion="7" />
    <application android:label="@string/app_name" android:icon="@drawable/icon">
        <provider android:name=".FontContentProvider" android:authorities="com.example.myfont" />
        <support-screens android:largeScreens="true" android:xlargeScreens="true" />
    </application>
</manifest>

Es ist nur eine Aktivität

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import java.io.FileNotFoundException;

public class FontContentProvider extends ContentProvider {
    private static final UriMatcher uriMatcher = new UriMatcher(-1);

    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
        return null;
    }

    public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
        String file_name = uri.getPath();
        if (file_name == null) {
            throw new FileNotFoundException();
        }
        if (file_name.startsWith("/")) {
            file_name = file_name.substring(1);
        }
        AssetFileDescriptor ad = null;
        try {
            ad = getContext().getAssets().openFd(file_name);
        } catch (Exception e) {
            Log.v("CPFontTest", "cp - openAssetFile EXCEPTION");
        }
        return ad;
    }

    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    public String getType(Uri uri) {
        AssetManager am = getContext().getAssets();
        StringBuilder xmlfileStringBuilder = new StringBuilder();
        try {
            for (String s : am.list("xml")) {
                xmlfileStringBuilder.append(s + "\n");
            }
            return xmlfileStringBuilder.toString();
        } catch (Exception e) {
            return null;
        }
    }

    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    public boolean onCreate() {
        return true;
    }

    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        return null;
    }

    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }

    static {
        uriMatcher.addURI(".fontcontentprovider", "fonts", 1);
    }
}
  • Was ist Ihre Frage?
  • wie man flipfont app mit android studio



2 Replies
  1. 2

    TL;DR: Zum erstellen einer FlipFont benötigen Sie eine gültige schriftart-Datei und die XML-Datei in assets. Die APK muss unterzeichnet werden, mit Monotype privaten keystore, das ist nicht möglich.


    Samsung und andere Hersteller verwenden Monotype ist FlipFont um das system zu ändern Schriftarten ohne root. Samsung und Monotype Imaging Inc. wollen Sie bezahlen, um Schriftarten ändern, müssen konzertierte Anstrengungen unternommen, um block-free fonts installiert wird.

    Brauchen Sie nicht jeden code zu erstellen, der die schriftart für FlipFont, so können Sie löschen FontContentProvider.java.

    Erstellen eines APK, das mit FlipFont müssen Sie die folgenden 3 Dinge:

    1) Eine gültige schriftart-Datei in assets/fonts/ReplaceWithFontName.ttf

    2) Eine XML in assets/xml/ReplaceWithFontName.xml

    3) Erstellen und signieren Sie die app mit Monotype ist private keystore.

    Beispiel-XML für Vermögenswerte:

    <?xml version="1.0" encoding="utf-8"?>
    <font displayname="ReplaceWithFontName">
      <sans>
        <file>
          <filename>ReplaceWithFontName.ttf</filename>
          <droidname>DroidSans.ttf</droidname>
        </file>
        <file>
          <filename>ReplaceWithFontName.ttf</filename>
          <droidname>DroidSans-Bold.ttf</droidname>
        </file>
      </sans>
    </font>

    Nun, Blick auf #3 wieder. Sie müssen zum signieren der APK mit Monotype ‚ s keystore. Sie don ‚ T haben Zugang zu diesem. Daher, Ihre APK funktioniert nicht auf Samsung-Geräte.

    Die folgende Methode ist dekompiliert aus der Anwendung „Einstellungen“ auf einem Samsung-Gerät und wird verwendet, um zu überprüfen, ob die FlipFont APK ist signiert mit dem richtigen Schlüssel:

    protected boolean checkFont(String apkname) {
      if (DEBUG) {
        Log.secD("FlipFont", "checkFont - checking apkname" + apkname);
      }
      if ("com.monotype.android.font.foundation".equals(apkname)) {
        return false;
      }
      PackageManager pm = this.mContext.getPackageManager();
      for (int i = 0; i < apkNameList.length; i++) {
        if (apkname != null) {
          if (apkname.equals(apkNameList[i])) {
            this.isCheckPlatformSignatures = pm.checkSignatures("android", apkNameList[i]) == 0;
            this.isCheckReleaseSignatures = Utils.isSignatureMatch(this.mContext, apkNameList[i]);
            Log.i("FontPreviewTablet", "apkname : " + apkname + ", isCheckPlatformSignatures : " + this.isCheckPlatformSignatures + ", isCheckReleaseSignatures : " + this.isCheckReleaseSignatures);
            if (!(this.isCheckPlatformSignatures || this.isCheckReleaseSignatures)) {
              if (apkname.equals("")) {
              }
            }
            return false;
          }
          continue;
        }
      }
      if (DEBUG) {
        Log.secD("FlipFont", "checkFont - check if valid certificate");
      }
      PackageInfo packageInfo = null;
      try {
        packageInfo = this.mFontListAdapter.mPackageManager.getPackageInfo(apkname, 64);
      } catch (Exception e) {
      }
      if (packageInfo != null) {
        Signature[] signatures = packageInfo.signatures;
        byte[] cert = signatures[0].toByteArray();
        try {
          MessageDigest md = MessageDigest.getInstance("SHA");
          md.update(signatures[0].toByteArray());
          if ("T84drf8v3ZMOLvt2SFG/K7ODXgI=".equals(Base64.encodeToString(md.digest(), 0).trim())) {
            if (DEBUG) {
              Log.v("FlipFont", "**Signature is correct**");
            }
            return false;
          }
          if (DEBUG) {
            Log.v("FlipFont", "**Signature is incorrect**");
          }
          return true;
        } catch (Exception e2) {
          e2.printStackTrace();
          InputStream input = new ByteArrayInputStream(cert);
          CertificateFactory cf = null;
          try {
            cf = CertificateFactory.getInstance("X509");
          } catch (CertificateException e3) {
            e3.printStackTrace();
          }
          X509Certificate c = null;
          try {
            c = (X509Certificate) cf.generateCertificate(input);
          } catch (CertificateException e32) {
            e32.printStackTrace();
          }
          if (DEBUG) {
            Log.secD("Example", "APK name: " + apkname);
            if (c != null) {
              Log.secD("Example", "Certificate for: " + c.getSubjectDN());
              Log.secD("Example", "Certificate issued by: " + c.getIssuerDN());
              Log.secD("Example", "The certificate is valid from " + c.getNotBefore() + " to " + c.getNotAfter());
              Log.secD("Example", "Certificate SN# " + c.getSerialNumber());
              Log.secD("Example", "Generated with " + c.getSigAlgName());
            }
          }
          String certIssuedByString = "CN=Ed Platz, OU=Display Imaging, O=Monotype Imanging Inc., L=Woburn, ST=MA, C=US";
          if (c != null && certIssuedByString.equals(c.getIssuerDN().toString())) {
            if (DEBUG) {
              Log.secD("FlipFont", "**Certificate data is correct**");
            }
            return false;
          }
        }
      }
      return true;
    }

    Wenn man sich bei der oben genannten Methode werden Sie feststellen, dass die APK-Signatur nicht geprüft, ob die APK ist ein Paket namens „com.monotype.android.font.Stiftung“.

    • Also Dosis es bedeuten, es ist imposible zu machen oder wenn ich com.monotype.android.font.foundation-package-name wird es funktionieren ?
    • Wenn Sie dem Paket-Namen könnte zu arbeiten. Das Gerät könnte bereits eine APK mit der Paket-name.
    • Ich habe gesehen, com.monotype.android.font.customname scheint die Arbeit für einige ppl. Ich habe versucht, diese Methode nun testen, testen und lassen Sie wissen.
    • keine Ahnung von LG Geräten tun, Sie haben auch font-Anbieter wie samsung mit monotype
    • Ich bin mir nicht sicher, sorry.
  2. 1

    Ich bin nicht sicher, ob es möglich ist, das system zu ändern schriftart, ohne verwurzelung, aber Sie können ändern Sie die system-schriftart skalieren. Sie verwenden sollten, FONT_SCALE string und ein float-Wert für diese. Ein Beispiel-code-snippet unten.

    Settings.System.putFloat(getBaseContext().getContentResolver(),
            Settings.System.FONT_SCALE, (float) 1.0);

    Beachten Sie, dass sollten Sie die notwendigen WRITE_SETTINGS-Berechtigung von Ihrem android-manifest-Datei.

    Finden Sie den rest der Dokumentation hier

    • Auch können Sie sehen, in Frage, die ich gegeben habe, wenn Sie beispielsweise ein android-Telefon, das Sie versuchen zu installieren, es erfordert keine root-Berechtigung
    • Es scheint, es ist eine Ausnahme für ein paar Geräte, einschließlich Samsung Galaxy-Geräten über das ändern der system-schriftart ohne root. Hier ist, wie Sie zu tun(die gleichen, wie verwurzelt Geräte): 1) Lesen Sie die Liste von Schriftarten, und in der Liste 2) ändern Sie die system-schriftart als der Benutzer wählt aus der Liste 3) Wenn Sie eine benutzerdefinierte schriftart eingestellt werden, speichern Sie die gewünschte schriftart-Datei unter /system/font/ Verzeichnis des Android-Gerät programmgesteuert
    • ja, einverstanden, obwohl ich diese app dekompiliert um den code zu erhalten aber ich bin ein Anfänger im coding-ich denke, wenn Sie jemand wissen, der Codierung Sie helfen können. es ist nur eine Aktivität in dieser app werde ich posten-code in Frage, und etc

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.