Как я могу снабдить цифровой подписью исполняемый файл?

В вашем журнале я вижу две основные причины, вызвавшие сбои.

W/cr_CrashFileManager: 
/data/user/0/com.gochronicle.chronicle/cache/WebView/Crash Reports does not 
exist or is not a directory


I/Choreographer: Skipped 46 frames!  The application may be doing too much 
work on its main thread.

Первая ошибка могла быть связана с appCachePath, который занимал время для обработки из-за неправильного пути.

Более поздняя ошибка связана с тем, что вашему коду / веб-просмотру требуется много времени для обработки, а фреймы пропускаются из-за этого. Возможно, из-за какой-то тяжелой обработки, которую вы выполняете в основе вашего приложения, что вызывает нить остановится на некоторое время.

Решением было бы использовать отдельный поток от основного потока пользовательского интерфейса, для которого вы можете использовать AsyncTask в Android.

В вашем случае асинхронная задача может не потребоваться, если ошибка произошла из-за того, что каталог не найден для appCachePath.

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
FrameLayout.LayoutParams rl = new 
FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
FrameLayout.LayoutParams.MATCH_PARENT);
            android.webkit.WebView wView = new 
android.webkit.WebView(this.getContext());
            wView.setId(0x100);
            //wView.setWebChromeClient(new WebChromeClient());
            wView.setWebViewClient(new WebViewClient());
            wView.getSettings().setJavaScriptEnabled(true);
            wView.getSettings().setAllowFileAccess(true);
            wView.getSettings().setAllowUniversalAccessFromFileURLs(true);
            wView.getSettings().setAllowContentAccess(true);
            wView.getSettings().setAppCacheEnabled(true);
            //also check this line of code for appCachePath
            String appCachePath = this.getCacheDir().getAbsolutePath();
             webSettings.setAppCachePath(appCachePath);



            wView.setScrollContainer(false);
            wView.setLayoutParams(rl);

            //execute asynctTask
          new LoadWebViewAsync.execute();

}

   class LoadWebViewAsync extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

          wView.loadUrl(linktourl);
            return null;
        }
    };
24
задан Artjom B. 10 May 2015 в 12:34
поделиться

4 ответа

Как уже упоминалось в других ответах, вам сначала необходимо приобрести сертификат, подходящий для подписи кода. Это будет стоить несколько сотен долларов, а не тысячи. Когда я недавно обновил сертификат моей компании в Globalsign , было также проведено расследование, чтобы проверить, была ли компания законной - поскольку я использовал номер мобильного телефона для процесса регистрации, они хотели получить письмо от бухгалтера компании, чтобы проверить что мы настоящий бизнес.

Чтобы подписать исполняемый файл, я использую задачу MSBuild. Вот выдержка из соответствующих частей:

<!--
Installer files that need to be signed.
-->
<ItemGroup>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\myinstaller.msi"/>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\setup.exe"/>
</ItemGroup>

<Target Name="ReleasePackaging">
  <!-- Sign the files we're going to release -->
  <SignTool
      CertificateStoreName="My"
      CertificateSubjectName="MyCompany"
      Description="My application description"
      TimestampServerUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
      TargetFiles="@(InstallerSignedFiles)"
     />
</Target>

Чтобы это работало, как указано выше, вам необходимо установить сертификат в хранилище личных сертификатов (см. CertificateStoreName="My" в приведенном выше примере). На веб-сайте Globalsign эта установка была автоматической частью процесса загрузки сертификата. Примечание: я обнаружил, что это помогает использовать Internet Explorer при загрузке сертификата, поскольку он интегрирован с хранилищем сертификатов Windows. Как только он окажется в хранилище сертификатов на загрузочном компьютере, вы можете экспортировать его в виде файла pfx , перенести на свой компьютер сборки и импортировать на него. Если вы все же экспортируете его, я бы посоветовал вам защитить экспортированный файл паролем на случай, если он попадет в чужие руки.

Когда вы используете задачу SignTool MSBuild, как описано выше, она считывает сертификаты из личного хранилища («Мое»), связанного с текущей учетной записью пользователя Windows. Это означает, что вы можете контролировать, кто может подписывать код с вашим сертификатом, что является хорошей вещью. Вы должны импортировать сертификат только в личный магазин разработчиков, которым вы доверяете.

Хорошая идея использовать сервер отметок времени при подписании кода, чтобы вам не нужно было переподписывать код после истечения срока действия сертификата.

19
ответ дан 28 November 2019 в 23:51
поделиться

Вам понадобится утилита командной строки для подписи кода от Microsoft.

А затем:

signtool.exe sign /v /f "MyCertificate.pfx" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"

или альтернативно

signcode.exe -a "sha1" -spc "MySoftwarePublishingCertificate.spc" -v "MyPrivateKeyFile.pvk" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"
11
ответ дан 28 November 2019 в 23:51
поделиться
1
ответ дан 28 November 2019 в 23:51
поделиться

Я никого здесь не рекламирую, но попробуйте VeriSign . Они предлагают Подписание кода , что вы и ищете.

4
ответ дан 28 November 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: