android signing
This commit is contained in:
@@ -53,7 +53,7 @@ CUtlString AndroidManifest_t::BuildManifest()
|
||||
CPUProject_t project = {};
|
||||
project.m_szName = m_szPackageName;
|
||||
unsigned int hash = project.GenerateProjectHash();
|
||||
CUtlString szOutputDir = CUtlString("%s/%s/android/%u_%s/",FPC_TEMPORAL_DIRNAME, project.m_target.GetTriplet().GetString(), hash, m_szPackageID.GetString());
|
||||
CUtlString szOutputDir = CUtlString("%s/android/%u_%s/",FPC_TEMPORAL_DIRNAME, hash, m_szPackageID.GetString());
|
||||
filesystem2->MakeDirectory(szOutputDir);
|
||||
filesystem2->MakeDirectory(CUtlString("%s/res", szOutputDir.GetString()));
|
||||
|
||||
@@ -84,6 +84,7 @@ class CAPKTool : public IAPKTool
|
||||
{
|
||||
public:
|
||||
virtual CUtlString BuildPackage( AndroidManifest_t manifest, CUtlString szManifestDir ) override;
|
||||
virtual CUtlString SignPackage( const char *szApk, LegalInfo_t *pLegalInfo, const char *szAlias, const char *szStorePassword, const char *szKeyPassword ) override;
|
||||
private:
|
||||
};
|
||||
|
||||
@@ -131,9 +132,74 @@ CUtlString CAPKTool::BuildPackage( AndroidManifest_t manifest, CUtlString szMani
|
||||
CUtlString("%s.apk", manifest.m_szPackageID.GetString()),
|
||||
};
|
||||
runner->Run(CUtlString("%s/zipalign",szBuildTools),szManifestDir,args);
|
||||
return manifest.m_szPackageID;
|
||||
runner->Wait();
|
||||
|
||||
return CUtlString("%s/%s.apk",szManifestDir.GetString(), manifest.m_szPackageID.GetString());
|
||||
}
|
||||
|
||||
CUtlString CAPKTool::SignPackage( const char *szApk, LegalInfo_t *pLegalInfo, const char *szAlias, const char *szStorePassword, const char *szKeyPassword )
|
||||
{
|
||||
V_printf(" APKSIGN %s\n", szApk );
|
||||
CUtlString szOutput = CUtlString("%s.signed", szApk);
|
||||
LegalInfo_t stLegalInfo = {};
|
||||
CUtlVector<CUtlString> args = {};
|
||||
|
||||
CPUProject_t project = {};
|
||||
project.m_szName = szAlias;
|
||||
unsigned int hash = project.GenerateProjectHash();
|
||||
CUtlString szOutputDir = CUtlString("%s/android/%u_%s/",FPC_TEMPORAL_DIRNAME, hash, szAlias);
|
||||
filesystem2->MakeDirectory(szOutputDir);
|
||||
CUtlString szKeystoreDir = CUtlString("%s/%s.jks",szOutputDir.GetString(),szAlias);
|
||||
CUtlString szDname = "";
|
||||
|
||||
IINISection *pSection = NULL;
|
||||
const char *szBuildTools;
|
||||
pSection = g_pConfig->GetSection("Android_Build_Tools");
|
||||
if (!pSection)
|
||||
Plat_FatalErrorFunc("build_tools are required for this target");
|
||||
szBuildTools = pSection->GetStringValue("path");
|
||||
|
||||
// We need to have a name at least
|
||||
stLegalInfo.FirstName = "Gordon";
|
||||
stLegalInfo.LastName = "Freeman";
|
||||
|
||||
if (pLegalInfo != NULL)
|
||||
stLegalInfo = *pLegalInfo;
|
||||
|
||||
if (!stLegalInfo.FirstName)
|
||||
Plat_FatalErrorFunc("First name wasn't provided\n");
|
||||
if (!stLegalInfo.LastName)
|
||||
Plat_FatalErrorFunc("Last name wasn't provided\n");
|
||||
szDname.AppendTail(CUtlString("CN=%s %s", stLegalInfo.FirstName, stLegalInfo.LastName));
|
||||
|
||||
args = {
|
||||
"-genkeypair",
|
||||
"-keystore", szKeystoreDir,
|
||||
"-alias", szAlias,
|
||||
"-keyalg", "RSA",
|
||||
"-keysize", "2048",
|
||||
"-validity", "10000",
|
||||
"-storepass", szStorePassword,
|
||||
"-keypass", szKeyPassword,
|
||||
"-dname", szDname,
|
||||
};
|
||||
runner->Run("keytool", args);
|
||||
runner->Wait();
|
||||
|
||||
args = {
|
||||
"sign",
|
||||
"--ks", szKeystoreDir,
|
||||
"--ks-key-alias", szAlias,
|
||||
"--ks-pass", CUtlString("pass:%s",szStorePassword),
|
||||
"--key-pass", CUtlString("pass:%s",szKeyPassword),
|
||||
szApk,
|
||||
};
|
||||
runner->Run(CUtlString("%s/apksigner",szBuildTools), args);
|
||||
runner->Wait();
|
||||
|
||||
return szApk;
|
||||
};
|
||||
|
||||
IAPKTool *APKTool()
|
||||
{
|
||||
static CAPKTool s_apktool = {};
|
||||
|
||||
Reference in New Issue
Block a user