C#のはAPK、アールパッケージ名を取得します

最近のプロジェクトは、需要を持って、我々は、フロントエンドを取得したり、パッケージ名内のAPKのAARファイルをアップロードする必要があります。

ここでの貢献は、彼らが小さなパートナーのニーズにアクセスできます。

プロジェクトでは、asp.netコア2.2であります 

あなたはnugetをインストールする必要があります。

AndroidXml
SharpCompress
使用してAndroidXmlを。
使用してSharpCompress.Archivesを。
使用してSystem.Dataを。
使用してSystem.IOを。
使用してSystem.Linqのを。
使用してSystem.Xmlのを。

名前空間 ******** 
{ 
    ///  <要約> 
    /// 包阅读器
     ///  </要約> 
    パブリック 静的 クラスPackageReader 
    {    

        ///  <要約> 
        /// 获取APK包名
         ///  </要約> 
        ///  <PARAM NAME = "ストリーム"> 文件流</ param>の
        ///  <リターン> </リターン> 
        公共の 静的 ストリングGetPackageNameFromApk(ストリームstream)
        { 
            使用(IArchive zipReader = ArchiveFactory.Open(ストリーム))
            { 
                IArchiveEntryのADF = zipReader.Entries.FirstOrDefault(W => w.Key == " のAndroidManifest.xml " )。

                もし(ADF == NULL 
                { 
                    戻り .Empty。
                } 

                使用(MemoryStreamをMemoryStreamを= 新しいのMemoryStream())
                { 
                    adf.OpenEntryStream()メソッドCopyTo(のMemoryStream)。
                    memoryStream.Seek(0 、SeekOrigin.Begin)。
                    AndroidXmlReaderリーダー = 新しいAndroidXmlReader(のMemoryStream)。
                    一方、(reader.Read())
                    { 
                        スイッチ(reader.NodeType)
                        { 
                            ケースXmlNodeType.Element:
                                 のためにint型 i = 0 ; I <reader.AttributeCount; iは++ 
                                { 
                                    reader.MoveToAttribute(i)を、
                                    もし(reader.Name!= " パッケージ"//読むだけでは、フィルタパッケージ名
                                    {
                                         続行; 
                                    } 
                                    返すreader.Valueを; 
                                } 
                                reader.MoveToElement(); 
                                BREAK ; 
                        } 
                    } 
                } 

              
                を返す 文字列.Empty; 
            } 
        } 



        ///  <要約> 
        /// 取得し、パッケージ名AAR
         / //  </要約> 
        ///  <PARAM NAME = "ストリーム"> ファイル・ストリーム</ param>の
        /// <リターン> </戻り> 
        パブリック 静的 文字列GetPackageNameFromAar(ストリームstream)
        { 
            使用(IArchive zipReader = ArchiveFactory.Open(ストリーム))
            { 
                IArchiveEntry ADF = zipReader.Entries.FirstOrDefault(W => w.Key == " のAndroidManifest.xml " ); 

                もし(ADF == NULL 
                { 
                    戻り .Empty。
                } 


                データセットDS = 新しいデータセット()。
                使用して(MemoryStreamをMemoryStreamを= 新しいですMemoryStream())
                { 
                    adf.OpenEntryStream()メソッドCopyTo(のMemoryStream)。
                    memoryStream.Seek(0 、SeekOrigin.Begin)。
                    ds.ReadXml(のMemoryStream)。
                } 
                DataRowCollection行 = ds.Tables [ " マニフェスト" ] .Rows。
                オブジェクトの結果=行[ 0 ] [ " パッケージ" ]。
                リターン結果?.ToString()?? 文字列.Empty; 
            } 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/refuge/p/11347631.html