├── .gitignore ├── .idea └── artifacts │ ├── Channel.xml │ ├── Jiagu.xml │ └── PGYUpload.xml ├── AXMLEditor3 ├── .gitignore ├── build.gradle.kts └── src │ └── main │ ├── META-INF │ └── MANIFEST.MF │ ├── java │ └── cn │ │ └── wjdiankong │ │ ├── chunk │ │ ├── AttributeData.java │ │ ├── Chunk.java │ │ ├── EndNameSpaceChunk.java │ │ ├── EndTagChunk.java │ │ ├── ResourceChunk.java │ │ ├── StartNameSpaceChunk.java │ │ ├── StartTagChunk.java │ │ ├── StringChunk.java │ │ ├── TagChunk.java │ │ ├── TextChunk.java │ │ └── XmlStruct.java │ │ └── main │ │ ├── AttributeType.java │ │ ├── ChunkTypeNumber.java │ │ ├── Main.java │ │ ├── ParserChunkUtils.java │ │ ├── ParserChunkUtilsHelper.java │ │ ├── Utils.java │ │ ├── XmlEditor.java │ │ └── XmlEditorHelper.java │ └── libs │ ├── kxml2-2.3.0.jar │ └── xmlpull_1_1_3_4c.jar ├── PGYUpload ├── build.gradle.kts └── src │ └── main │ ├── META-INF │ └── MANIFEST.MF │ └── kotlin │ └── com │ └── wpf │ └── utils │ └── pgyupload │ ├── Main.kt │ └── pgy │ ├── PGYHtml.kt │ ├── Upload.kt │ ├── data │ ├── ApkInfo.kt │ ├── BaseResponse.kt │ ├── CheckResponseInfo.kt │ ├── TokenRequest.kt │ └── TokenResponse.kt │ └── http │ ├── Callback.kt │ └── HttpHelper.kt ├── Tools ├── build.gradle.kts └── src │ └── main │ ├── META-INF │ └── MANIFEST.MF │ └── kotlin │ └── com │ └── wpf │ └── utils │ ├── Config.kt │ ├── Main.kt │ ├── ResourceManager.kt │ ├── TimeFormat.kt │ ├── ex │ ├── FileEx.kt │ ├── FileUtil.kt │ └── StringEx.kt │ ├── http │ ├── CacheFile.kt │ └── HttpClient.kt │ └── tools │ ├── AXMLEditor2Util.kt │ ├── ApkSignerUtil.kt │ ├── DXUtil.kt │ ├── JADXUtil.kt │ ├── LogStreamThread.kt │ ├── ManifestEditorUtil.kt │ ├── ProgressUtil.kt │ ├── RunJar.kt │ ├── SignHelper.kt │ ├── SophixPatchBaseTool.kt │ ├── SophixPatchTool.kt │ └── ZipalignUtil.kt ├── WebView ├── build.gradle.kts └── src │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── wpf │ │ └── util │ │ └── webview │ │ ├── DevToolsDebuggerServer.kt │ │ ├── DevToolsWebSocket.kt │ │ ├── DevToolsWebSocketServlet.kt │ │ ├── JavaBridge.kt │ │ └── WebView.kt │ └── desktopMain │ └── kotlin │ └── com │ └── wpf │ └── util │ └── webview │ ├── Chrome.kt │ ├── CookieManagerCompat.kt │ ├── WebEngine.kt │ ├── WebViewDesktop.kt │ ├── WebViewImpl.kt │ └── utils │ ├── ClassTransformer.kt │ └── WebViewJavaAgent.kt ├── base ├── .gitignore ├── build.gradle.kts └── src │ └── main │ ├── META-INF │ └── MANIFEST.MF │ ├── java │ └── com │ │ └── wpf │ │ └── base │ │ └── dealfile │ │ ├── ChannelAndSign.kt │ │ ├── Config.kt │ │ ├── Main.kt │ │ └── util │ │ ├── ThreadPoolHelper.kt │ │ └── TimeFormat.kt │ └── resources │ ├── AXMLEditor2Github.jar │ ├── apksigner.jar │ └── zipalign │ ├── zipalign.exe │ ├── zipalign_linux.zip │ └── zipalign_mac ├── build.gradle.kts ├── common ├── build.gradle.kts ├── libs │ └── bcprov-jdk18on.jar └── src │ └── commonMain │ ├── kotlin │ └── com │ │ └── wpf │ │ └── util │ │ └── common │ │ ├── App.kt │ │ └── ui │ │ ├── UiConfig.kt │ │ ├── base │ │ ├── Apk.kt │ │ ├── Group.kt │ │ ├── Menu.kt │ │ ├── SelectInterface.kt │ │ └── SelectItem.kt │ │ ├── channelset │ │ ├── ApkItem.kt │ │ ├── ChannelSetPage.kt │ │ ├── ChannelSetViewModel.kt │ │ ├── Client.kt │ │ └── Path.kt │ │ ├── configset │ │ ├── ConfigPageViewModel.kt │ │ └── ConfigSetPage.kt │ │ ├── dosign │ │ └── doSignPage.kt │ │ ├── http │ │ └── Http.kt │ │ ├── jiagu │ │ └── jiaguPage.kt │ │ ├── marketplace │ │ ├── MarketPlacePage.kt │ │ ├── MarketPlaceViewModel.kt │ │ └── markets │ │ │ ├── HuaweiMarket.kt │ │ │ ├── OppoMarket.kt │ │ │ ├── QH360Market.kt │ │ │ ├── SamsungMarket.kt │ │ │ ├── UnknownMarket.kt │ │ │ ├── VivoMarket.kt │ │ │ ├── XiaomiMarket.kt │ │ │ └── base │ │ │ ├── BrowserMarket.kt │ │ │ ├── Market.kt │ │ │ ├── MarketApk.kt │ │ │ ├── MarketType.kt │ │ │ ├── UploadData.kt │ │ │ ├── UploadState.kt │ │ │ └── XiaomiPushData.kt │ │ ├── signset │ │ ├── SignFile.kt │ │ ├── SignSetPage.kt │ │ └── SignSetViewModel.kt │ │ ├── utils │ │ ├── AutoSave.kt │ │ ├── AutoSaveAny.kt │ │ ├── AutoSaveList.kt │ │ ├── AutoSaveMap.kt │ │ ├── Callback.kt │ │ ├── Data.kt │ │ ├── DropBoxPanel.kt │ │ ├── FileSelector.kt │ │ ├── OnApplicationExit.kt │ │ ├── StringEx.kt │ │ └── WindowDraggableArea.kt │ │ └── widget │ │ ├── AddItemDialog.kt │ │ ├── WebViewDialog.kt │ │ └── common │ │ ├── AddImage.kt │ │ ├── BigTitle.kt │ │ ├── InputView.kt │ │ ├── ItemTextView.kt │ │ ├── ItemView.kt │ │ ├── ShapeText.kt │ │ └── Title.kt │ └── resources │ ├── application.conf │ └── image │ ├── api.png │ ├── icon.png │ └── upload.png ├── dealJiagu ├── build.gradle.kts └── src │ └── main │ ├── META-INF │ └── MANIFEST.MF │ ├── java │ └── com │ │ └── wpf │ │ └── utils │ │ └── jiagu │ │ ├── JiaGu.kt │ │ ├── Main.kt │ │ └── utils │ │ ├── AES128Helper.kt │ │ ├── ApplicationHelper.kt │ │ ├── DexHelper.kt │ │ ├── EncryptUtils.kt │ │ ├── TimeFormat.kt │ │ └── parsedex │ │ ├── ParseDexUtils.kt │ │ ├── Utils.kt │ │ └── struct │ │ ├── AnnotationsDirectoryItem.kt │ │ ├── ClassDataItem.kt │ │ ├── ClassDefItem.kt │ │ ├── CodeItem.kt │ │ ├── DexFile.h │ │ ├── EncodedField.kt │ │ ├── EncodedMethod.kt │ │ ├── FieldIdsItem.kt │ │ ├── HeaderType.kt │ │ ├── MapItem.kt │ │ ├── MapList.kt │ │ ├── MethodIdsItem.kt │ │ ├── ProtoIdsItem.kt │ │ ├── StringDataItem.kt │ │ ├── StringIdsItem.kt │ │ ├── TypeIdsItem.kt │ │ └── TypeList.kt │ └── resources │ ├── ManifestEditor.jar │ ├── apksigner.jar │ ├── dx.zip │ ├── jiaguLibrary.zip │ └── zipalign │ ├── zipalign.exe │ ├── zipalign_linux.zip │ └── zipalign_mac ├── desktop ├── build.gradle.kts ├── icon.png ├── rules.pro └── src │ └── jvmMain │ └── kotlin │ └── Main.kt ├── fileReplace ├── .gitignore ├── build.gradle.kts └── src │ └── main │ ├── META-INF │ └── MANIFEST.MF │ └── java │ └── com │ └── wpf │ └── utils │ ├── FileReplace.kt │ └── Main.kt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jiagulibrary ├── app │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ ├── android │ │ └── support │ │ │ └── v4 │ │ │ └── app │ │ │ └── CoreComponentFactory.java │ │ └── androidx │ │ └── core │ │ └── app │ │ └── CoreComponentFactory.java ├── build.gradle ├── build.gradle.kts ├── gradle.properties ├── jiagu.jks ├── local.properties ├── settings.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ ├── cpp │ ├── CMakeLists.txt │ ├── jiagu.cpp │ └── utils │ │ ├── And64InlineHook.cpp │ │ ├── And64InlineHook.hpp │ │ ├── aes.c │ │ ├── aes.h │ │ ├── dex_header.h │ │ ├── dlopen.c │ │ ├── dlopen.h │ │ ├── invoke_java.cpp │ │ ├── invoke_java.h │ │ ├── memload.cpp │ │ ├── memload.h │ │ └── plog.h │ └── java │ └── com │ └── wpf │ └── util │ └── jiagulibrary │ ├── StubApp.java │ └── utils │ ├── ApplicationHook.java │ ├── AssetsUtil.java │ ├── IO.java │ └── Reflect.java ├── local.properties ├── settings.gradle.kts └── wix311 ├── LICENSE.TXT ├── LuxTasks.dll ├── Microsoft.Deployment.Compression.Cab.dll ├── Microsoft.Deployment.Compression.dll ├── Microsoft.Deployment.Resources.dll ├── Microsoft.Deployment.WindowsInstaller.Package.dll ├── Microsoft.Deployment.WindowsInstaller.dll ├── ThmViewer.exe ├── WixBalExtension.dll ├── WixComPlusExtension.dll ├── WixCop.exe ├── WixDependencyExtension.dll ├── WixDifxAppExtension.dll ├── WixDirectXExtension.dll ├── WixFirewallExtension.dll ├── WixGamingExtension.dll ├── WixHttpExtension.dll ├── WixIIsExtension.dll ├── WixLuxExtension.dll ├── WixMsmqExtension.dll ├── WixNetFxExtension.dll ├── WixPSExtension.dll ├── WixSqlExtension.dll ├── WixTagExtension.dll ├── WixTasks.dll ├── WixUIExtension.dll ├── WixUtilExtension.dll ├── WixVSExtension.MSBuild12.dll ├── WixVSExtension.MSBuild14.dll ├── WixVSExtension.dll ├── candle.exe ├── candle.exe.config ├── darice.cub ├── dark.exe ├── dark.exe.config ├── difxapp_x64.wixlib ├── difxapp_x86.wixlib ├── doc ├── DTF.chm ├── DTFAPI.chm ├── Dependency.xsd ├── WiX.chm ├── bal.xsd ├── complus.xsd ├── difxapp.xsd ├── firewall.xsd ├── gaming.xsd ├── http.xsd ├── iis.xsd ├── lux.xsd ├── msmq.xsd ├── netfx.xsd ├── ps.xsd ├── sql.xsd ├── tag.xsd ├── thmutil.xsd ├── util.xsd ├── vs.xsd ├── wix.xsd └── wixloc.xsd ├── heat.exe ├── heat.exe.config ├── insignia.exe ├── insignia.exe.config ├── light.exe ├── light.exe.config ├── lit.exe ├── lit.exe.config ├── lux.exe ├── lux.exe.config ├── lux.targets ├── melt.exe ├── melt.exe.config ├── mergemod.cub ├── mergemod.dll ├── mspatchc.dll ├── nit.exe ├── nit.exe.config ├── pyro.exe ├── pyro.exe.config ├── retina.exe ├── retina.exe.config ├── sdk ├── BootstrapperCore.config ├── BootstrapperCore.dll ├── BootstrapperCore.xml ├── DocCompiler.exe ├── MakeSfxCA.exe ├── MakeSfxCA.exe.config ├── Microsoft.Deployment.Compression.Cab.dll ├── Microsoft.Deployment.Compression.Cab.xml ├── Microsoft.Deployment.Compression.Zip.dll ├── Microsoft.Deployment.Compression.Zip.xml ├── Microsoft.Deployment.Compression.dll ├── Microsoft.Deployment.Compression.xml ├── Microsoft.Deployment.Resources.dll ├── Microsoft.Deployment.Resources.xml ├── Microsoft.Deployment.WindowsInstaller.Linq.dll ├── Microsoft.Deployment.WindowsInstaller.Linq.xml ├── Microsoft.Deployment.WindowsInstaller.Package.dll ├── Microsoft.Deployment.WindowsInstaller.Package.xml ├── Microsoft.Deployment.WindowsInstaller.dll ├── Microsoft.Deployment.WindowsInstaller.xml ├── MsgGen.exe ├── XsdGen.exe ├── XsdStitch.exe ├── inc │ ├── BalBaseBootstrapperApplication.h │ ├── IBootstrapperApplication.h │ ├── IBootstrapperBAFunction.h │ ├── IBootstrapperEngine.h │ ├── aclutil.h │ ├── apputil.h │ ├── apuputil.h │ ├── atomutil.h │ ├── balcondition.h │ ├── balinfo.h │ ├── balretry.h │ ├── balutil.h │ ├── buffutil.h │ ├── butil.h │ ├── cabcutil.h │ ├── cabutil.h │ ├── certutil.h │ ├── conutil.h │ ├── cryputil.h │ ├── custommsierrors.h │ ├── deputil.h │ ├── dictutil.h │ ├── dirutil.h │ ├── dlutil.h │ ├── dutil.h │ ├── eseutil.h │ ├── fileutil.h │ ├── gdiputil.h │ ├── iis7util.h │ ├── inetutil.h │ ├── iniutil.h │ ├── jsonutil.h │ ├── locutil.h │ ├── logutil.h │ ├── memutil.h │ ├── metautil.h │ ├── osutil.h │ ├── pathutil.h │ ├── perfutil.h │ ├── polcutil.h │ ├── procutil.h │ ├── regutil.h │ ├── resrutil.h │ ├── reswutil.h │ ├── rexutil.h │ ├── rmutil.h │ ├── rssutil.h │ ├── sceutil.h │ ├── shelutil.h │ ├── sqlutil.h │ ├── srputil.h │ ├── strutil.h │ ├── svcutil.h │ ├── thmutil.h │ ├── timeutil.h │ ├── uriutil.h │ ├── userutil.h │ ├── wcalog.h │ ├── wcautil.h │ ├── wcawow64.h │ ├── wcawrapquery.h │ ├── wiutil.h │ ├── wuautil.h │ └── xmlutil.h ├── vs2010 │ └── lib │ │ ├── x64 │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib │ │ └── x86 │ │ ├── balutil.lib │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib ├── vs2012 │ └── lib │ │ ├── x64 │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib │ │ └── x86 │ │ ├── balutil.lib │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib ├── vs2013 │ └── lib │ │ ├── x64 │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib │ │ └── x86 │ │ ├── balutil.lib │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib ├── vs2015 │ └── lib │ │ ├── x64 │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib │ │ └── x86 │ │ ├── balutil.lib │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib ├── vs2017 │ └── lib │ │ ├── x64 │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib │ │ └── x86 │ │ ├── balutil.lib │ │ ├── deputil.lib │ │ ├── dutil.lib │ │ └── wcautil.lib ├── wix.ca.targets ├── wix.nativeca.targets ├── x64 │ └── sfxca.dll └── x86 │ └── sfxca.dll ├── shine.exe ├── shine.exe.config ├── smoke.exe ├── smoke.exe.config ├── torch.exe ├── torch.exe.config ├── wconsole.dll ├── winterop.dll ├── wix.dll ├── wix.targets ├── wix200x.targets ├── wix2010.targets └── x86 └── burn.exe /.gitignore: -------------------------------------------------------------------------------- 1 | local.properties 2 | .gradle 3 | build/ 4 | !gradle/wrapper/gradle-wrapper.jar 5 | !**/src/main/**/build/ 6 | !**/src/test/**/build/ 7 | 8 | ### IntelliJ IDEA ### 9 | .idea/modules.xml 10 | .idea/jarRepositories.xml 11 | .idea/compiler.xml 12 | .idea/libraries/ 13 | *.iws 14 | *.iml 15 | *.ipr 16 | out/ 17 | !**/src/main/**/out/ 18 | !**/src/test/**/out/ 19 | 20 | ### Eclipse ### 21 | .apt_generated 22 | .classpath 23 | .factorypath 24 | .project 25 | .settings 26 | .springBeans 27 | .sts4-cache 28 | bin/ 29 | !**/src/main/**/bin/ 30 | !**/src/test/**/bin/ 31 | 32 | ### NetBeans ### 33 | /nbproject/private/ 34 | /nbbuild/ 35 | /dist/ 36 | /nbdist/ 37 | /.nb-gradle/ 38 | 39 | ### VS Code ### 40 | .vscode/ 41 | 42 | ### Mac OS ### 43 | .DS_Store 44 | /.idea/ 45 | -------------------------------------------------------------------------------- /AXMLEditor3/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build/ 3 | !gradle/wrapper/gradle-wrapper.jar 4 | !**/src/main/**/build/ 5 | !**/src/test/**/build/ 6 | 7 | ### IntelliJ IDEA ### 8 | .idea/modules.xml 9 | .idea/jarRepositories.xml 10 | .idea/compiler.xml 11 | .idea/libraries/ 12 | *.iws 13 | *.iml 14 | *.ipr 15 | out/ 16 | !**/src/main/**/out/ 17 | !**/src/test/**/out/ 18 | 19 | ### Eclipse ### 20 | .apt_generated 21 | .classpath 22 | .factorypath 23 | .project 24 | .settings 25 | .springBeans 26 | .sts4-cache 27 | bin/ 28 | !**/src/main/**/bin/ 29 | !**/src/test/**/bin/ 30 | 31 | ### NetBeans ### 32 | /nbproject/private/ 33 | /nbbuild/ 34 | /dist/ 35 | /nbdist/ 36 | /.nb-gradle/ 37 | 38 | ### VS Code ### 39 | .vscode/ 40 | 41 | ### Mac OS ### 42 | .DS_Store -------------------------------------------------------------------------------- /AXMLEditor3/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kotlin") 3 | } 4 | 5 | group = "cn.wjdiankong" 6 | version = "1.0-SNAPSHOT" 7 | 8 | repositories { 9 | mavenCentral() 10 | } 11 | 12 | dependencies { 13 | implementation(files("src/main/libs/kxml2-2.3.0.jar")) 14 | implementation(files("src/main/libs/xmlpull_1_1_3_4c.jar")) 15 | } 16 | 17 | kotlin { 18 | jvmToolchain(8) 19 | } -------------------------------------------------------------------------------- /AXMLEditor3/src/main/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: cn.wjdiankong.main.Main 3 | 4 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/chunk/AttributeData.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.chunk; 2 | 3 | import cn.wjdiankong.main.Utils; 4 | 5 | public class AttributeData { 6 | 7 | public int nameSpaceUri; 8 | public int name; 9 | public int valueString; 10 | public int type = 0; 11 | public int data = 0; 12 | 13 | public byte[] nameSpaceUriB; 14 | public byte[] nameB; 15 | public byte[] valueStringB; 16 | public byte[] typeB; 17 | public byte[] dataB; 18 | 19 | public int offset; 20 | 21 | public int getLen(){ 22 | return 20; 23 | } 24 | 25 | public static AttributeData createAttribute(byte[] src){ 26 | AttributeData data = new AttributeData(); 27 | data.nameSpaceUriB = Utils.copyByte(src, 0, 4); 28 | data.nameB = Utils.copyByte(src, 4, 4); 29 | data.valueStringB = Utils.copyByte(src, 8, 4); 30 | data.typeB = Utils.copyByte(src, 12, 4); 31 | data.dataB = Utils.copyByte(src, 16, 4); 32 | return data; 33 | } 34 | 35 | public byte[] getByte(){ 36 | byte[] bytes = new byte[20]; 37 | Utils.byteConcat(bytes, nameSpaceUriB, 0); 38 | Utils.byteConcat(bytes, nameB, 4); 39 | Utils.byteConcat(bytes, valueStringB, 8); 40 | Utils.byteConcat(bytes, typeB, 12); 41 | Utils.byteConcat(bytes, dataB, 16); 42 | return bytes; 43 | } 44 | 45 | public static AttributeData createAttribute(int uri, int name, int value, int type, int data1){ 46 | AttributeData data = new AttributeData(); 47 | data.nameSpaceUriB = Utils.int2Byte(uri); 48 | data.nameB = Utils.int2Byte(name); 49 | data.valueStringB = Utils.int2Byte(value); 50 | data.typeB = Utils.int2Byte(type); 51 | data.dataB = Utils.int2Byte(data1); 52 | return data; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/chunk/Chunk.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.chunk; 2 | 3 | public interface Chunk { 4 | 5 | byte[] getChunkByte(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/chunk/EndNameSpaceChunk.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.chunk; 2 | 3 | import cn.wjdiankong.main.Utils; 4 | 5 | public class EndNameSpaceChunk { 6 | 7 | public byte[] type = new byte[4]; 8 | public byte[] size = new byte[4]; 9 | public byte[] lineNumber = new byte[4]; 10 | public byte[] unknown = new byte[4]; 11 | public byte[] prefix = new byte[4]; 12 | public byte[] uri = new byte[4]; 13 | 14 | public static EndNameSpaceChunk createChunk(byte[] byteSrc){ 15 | 16 | EndNameSpaceChunk chunk = new EndNameSpaceChunk(); 17 | 18 | //解析type 19 | chunk.type = Utils.copyByte(byteSrc, 0, 4); 20 | 21 | //解析size 22 | chunk.size = Utils.copyByte(byteSrc, 4, 4); 23 | 24 | //解析行号 25 | chunk.lineNumber = Utils.copyByte(byteSrc, 8, 4); 26 | 27 | //解析unknown 28 | chunk.unknown = Utils.copyByte(byteSrc, 12, 4); 29 | 30 | //解析prefix(这里需要注意的是行号后面的四个字节为FFFF,过滤) 31 | chunk.prefix = Utils.copyByte(byteSrc, 16, 4); 32 | 33 | //解析Uri 34 | chunk.uri = Utils.copyByte(byteSrc, 20, 4); 35 | 36 | return chunk; 37 | 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/chunk/EndTagChunk.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.chunk; 2 | 3 | import cn.wjdiankong.main.ChunkTypeNumber; 4 | import cn.wjdiankong.main.Utils; 5 | 6 | public class EndTagChunk implements Chunk{ 7 | 8 | public byte[] type = new byte[4]; 9 | public byte[] size = new byte[4]; 10 | public byte[] lineNumber = new byte[4]; 11 | public byte[] unknown = new byte[4]; 12 | public byte[] uri = new byte[4]; 13 | public byte[] name = new byte[4]; 14 | 15 | public int offset; 16 | public String tagValue; 17 | 18 | public EndTagChunk(){ 19 | //初始化以下没有太大用途的字段 20 | type = Utils.int2Byte(ChunkTypeNumber.CHUNK_ENDTAG); 21 | size = Utils.int2Byte(24); 22 | lineNumber = new byte[4]; 23 | unknown = new byte[4]; 24 | uri = Utils.int2Byte(-1); 25 | } 26 | 27 | public static EndTagChunk createChunk(int name){ 28 | EndTagChunk chunk = new EndTagChunk(); 29 | chunk.name = Utils.int2Byte(name); 30 | return chunk; 31 | } 32 | 33 | public byte[] getChunkByte(){ 34 | byte[] bytes = new byte[getLen()]; 35 | bytes = Utils.byteConcat(bytes, type, 0); 36 | bytes = Utils.byteConcat(bytes, size, 4); 37 | bytes = Utils.byteConcat(bytes, lineNumber, 8); 38 | bytes = Utils.byteConcat(bytes, unknown, 12); 39 | bytes = Utils.byteConcat(bytes, uri, 16); 40 | bytes = Utils.byteConcat(bytes, name, 20); 41 | return bytes; 42 | } 43 | 44 | public int getLen(){ 45 | return type.length + size.length + lineNumber.length + unknown.length + uri.length + name.length; 46 | } 47 | 48 | public static EndTagChunk createChunk(byte[] byteSrc, int offset){ 49 | 50 | EndTagChunk chunk = new EndTagChunk(); 51 | 52 | chunk.offset = offset; 53 | 54 | //解析type 55 | chunk.type = Utils.copyByte(byteSrc, 0, 4); 56 | 57 | //解析size 58 | chunk.size = Utils.copyByte(byteSrc, 4, 4); 59 | 60 | //解析行号 61 | chunk.lineNumber = Utils.copyByte(byteSrc, 8, 4); 62 | 63 | //解析unknown 64 | chunk.unknown = Utils.copyByte(byteSrc, 12, 4); 65 | 66 | //解析Uri 67 | chunk.uri = Utils.copyByte(byteSrc, 16, 4); 68 | 69 | //解析TagName 70 | chunk.name = Utils.copyByte(byteSrc, 20, 4); 71 | 72 | return chunk; 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/chunk/ResourceChunk.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.chunk; 2 | 3 | import java.util.ArrayList; 4 | 5 | import cn.wjdiankong.main.Utils; 6 | 7 | public class ResourceChunk { 8 | 9 | public byte[] type; 10 | public byte[] size; 11 | public byte[] ids; 12 | 13 | public ArrayList resourcIdList; 14 | 15 | public static ResourceChunk createChunk(byte[] byteSrc, int offset){ 16 | 17 | ResourceChunk chunk = new ResourceChunk(); 18 | 19 | chunk.type = Utils.copyByte(byteSrc, 0+offset, 4); 20 | 21 | chunk.size = Utils.copyByte(byteSrc, 4+offset, 4); 22 | int chunkSize = Utils.byte2int(chunk.size); 23 | 24 | chunk.ids = Utils.copyByte(byteSrc, 8+offset, chunkSize-8); 25 | 26 | //这里需要注意的是chunkSize是包含了chunkTag和chunkSize这两个字节的,所以需要剔除 27 | byte[] resourceIdByte = Utils.copyByte(byteSrc, 8+offset, chunkSize-8); 28 | ArrayList resourceIdList = new ArrayList(resourceIdByte.length/4); 29 | for(int i=0;i startTagChunkList = new ArrayList(); 22 | 23 | public ArrayList endTagChunkList = new ArrayList(); 24 | 25 | public ArrayList textChunkList = new ArrayList(); 26 | 27 | public ArrayList tagChunkList = new ArrayList(); 28 | 29 | public void clear(){ 30 | magicNumber = null; 31 | fileSize = null; 32 | stringChunk = null; 33 | resChunk = null; 34 | startNamespaceChunk = null; 35 | endNamespaceChunk = null; 36 | startTagChunkList.clear(); 37 | endTagChunkList.clear(); 38 | textChunkList.clear(); 39 | tagChunkList.clear(); 40 | 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/main/ChunkTypeNumber.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.main; 2 | 3 | /** 4 | * 5 | chunks' magic numbers 6 | enum{ 7 | CHUNK_HEAD = 0x00080003, 8 | 9 | CHUNK_STRING = 0x001c0001, 10 | CHUNK_RESOURCE = 0x00080180, 11 | 12 | CHUNK_STARTNS = 0x00100100, 13 | CHUNK_ENDNS = 0x00100101, 14 | CHUNK_STARTTAG = 0x00100102, 15 | CHUNK_ENDTAG = 0x00100103, 16 | CHUNK_TEXT = 0x00100104, 17 | }; 18 | * @author i 19 | * 20 | */ 21 | public class ChunkTypeNumber { 22 | 23 | public final static int CHUNK_HEAD = 0x00080003; 24 | public final static int CHUNK_STRING = 0x001c0001; 25 | public final static int CHUNK_STARTNS = 0x00100100; 26 | public final static int CHUNK_ENDNS = 0x00100101; 27 | public final static int CHUNK_STARTTAG = 0x00100102; 28 | public final static int CHUNK_ENDTAG = 0x00100103; 29 | public final static int CHUNK_TEXT = 0x00100104; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/main/ParserChunkUtilsHelper.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.main; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class ParserChunkUtilsHelper { 7 | 8 | public static Map ParserChunkUtilsMap = new HashMap<>(); 9 | public static ParserChunkUtils get(String fileName) { 10 | if (ParserChunkUtilsMap.getOrDefault(fileName, null) == null) { 11 | put(fileName, new ParserChunkUtils(fileName)); 12 | } 13 | return ParserChunkUtilsMap.getOrDefault(fileName, null); 14 | } 15 | 16 | public static void put(String fileName, ParserChunkUtils ParserChunkUtils) { 17 | ParserChunkUtilsMap.put(fileName, ParserChunkUtils); 18 | } 19 | 20 | public static void clearAll() { 21 | ParserChunkUtilsMap.clear(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/java/cn/wjdiankong/main/XmlEditorHelper.java: -------------------------------------------------------------------------------- 1 | package cn.wjdiankong.main; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class XmlEditorHelper { 7 | 8 | public static Map xmlEditorHashMap = new HashMap<>(); 9 | public static XmlEditor get(String fileName) { 10 | if (xmlEditorHashMap.getOrDefault(fileName, null) == null) { 11 | put(fileName, new XmlEditor(fileName)); 12 | } 13 | return xmlEditorHashMap.getOrDefault(fileName, null); 14 | } 15 | 16 | public static void put(String fileName, XmlEditor xmlEditor) { 17 | xmlEditorHashMap.put(fileName, xmlEditor); 18 | } 19 | 20 | public static void clearAll() { 21 | xmlEditorHashMap.clear(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /AXMLEditor3/src/main/libs/kxml2-2.3.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/AXMLEditor3/src/main/libs/kxml2-2.3.0.jar -------------------------------------------------------------------------------- /AXMLEditor3/src/main/libs/xmlpull_1_1_3_4c.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/AXMLEditor3/src/main/libs/xmlpull_1_1_3_4c.jar -------------------------------------------------------------------------------- /PGYUpload/src/main/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.wpf.utils.pgyupload.MainKt 3 | 4 | -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/PGYHtml.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy 2 | 3 | import com.wpf.utils.pgyupload.pgy.data.ApkInfo 4 | import java.io.File 5 | import java.nio.charset.Charset 6 | 7 | object PGYHtml { 8 | 9 | fun deal(curPath: String, isTest: String, host: String, release: String, baseHtmlPath: String, apkInfo: ApkInfo) { 10 | val baseHtmlFile = File(baseHtmlPath) 11 | if (!baseHtmlFile.exists()) { 12 | println("基础Html未找到") 13 | return 14 | } 15 | var baseHtmlStr = baseHtmlFile.readText(Charset.forName("utf-8")) 16 | val pgyHtmlFile = File(curPath + File.separator + "pgy.html") 17 | if (!pgyHtmlFile.exists()) { 18 | pgyHtmlFile.createNewFile() 19 | } 20 | baseHtmlFile.copyTo(pgyHtmlFile, true) 21 | baseHtmlStr = baseHtmlStr.replace("\${appQRCodeURL}", apkInfo.buildQRCodeURL) 22 | baseHtmlStr = baseHtmlStr.replace("\${buildVersion}", apkInfo.buildVersion) 23 | baseHtmlStr = baseHtmlStr.replace("\${buildUpdated}", apkInfo.buildUpdated) 24 | baseHtmlStr = baseHtmlStr.replace("\${host}", host) 25 | baseHtmlStr = baseHtmlStr.replace("\${test}", isTest) 26 | baseHtmlStr = baseHtmlStr.replace("\${release}", release) 27 | pgyHtmlFile.writeText(baseHtmlStr, Charset.forName("utf-8")) 28 | } 29 | } -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/data/ApkInfo.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy.data 2 | 3 | data class ApkInfo( 4 | val buildKey: String, //Build Key是唯一标识应用的索引ID 5 | val buildType: Int, //应用类型(1:iOS; 2:Android) 6 | val buildIsFirst: Int, //是否是第一个App(1:是; 2:否) 7 | val buildIsLastest: Int, //是否是最新版(1:是; 2:否) 8 | val buildFileSize: Long, //App 文件大小 9 | val buildName: String, //应用名称 10 | val buildVersion: String, //版本号, 默认为1.0 (是应用向用户宣传时候用到的标识,例如:1.1、8.2.1等。) 11 | val buildVersionNo: String, //上传包的版本编号,默认为1 (即编译的版本号,一般来说,编译一次会变动一次这个版本号, 在 Android 上叫 Version Code。对于 iOS 来说,是字符串类型;对于 Android 来说是一个整数。例如:1001,28等。) 12 | val buildBuildVersion: String, //蒲公英生成的用于区分历史版本的build号 13 | val buildIdentifier: String, //应用程序包名,iOS为BundleId,Android为包名 14 | val buildIcon: String, //应用的Icon图标key,访问地址为 https://www.pgyer.com/image/view/app_icons/ 15 | val buildDescription: String, //应用介绍 16 | val buildUpdateDescription: String, //应用更新说明 17 | val buildScreenShots: String, //应用截图的key,获取地址为 https://www.pgyer.com/image/view/app_screenshots/ 18 | val buildShortcutUrl: String, //应用短链接 19 | val buildQRCodeURL: String, //应用二维码地址 20 | val buildCreated: String, //应用上传时间 21 | val buildUpdated: String, //应用更新时间 22 | var updateMsg: String, //应用更新文案 23 | ) 24 | -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/data/BaseResponse.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy.data 2 | 3 | open class BaseResponse( 4 | val code: Int, 5 | val message: String, 6 | val data: T 7 | ) -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/data/CheckResponseInfo.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy.data 2 | 3 | data class CheckResponseInfo( 4 | val buildVersion: String, //版本号, 默认为1.0 (是应用向用户宣传时候用到的标识,例如:1.1、8.2.1等。) 5 | val forceUpdateVersion: String, //强制更新版本号(未设置强置更新默认为空) 6 | val forceUpdateVersionNo: String, //强制更新的版本编号 7 | val needForceUpdate: Boolean, //是否强制更新 8 | val downloadURL: String, //应用安装地址 9 | val appURL: String, //应用安装单页地址 10 | val buildHaveNewVersion: Boolean, //是否有新版本 11 | val buildVersionNo: String, //上传包的版本编号,默认为1 (即编译的版本号,一般来说,编译一次会变动一次这个版本号, 在 Android 上叫 Version Code。对于 iOS 来说,是字符串类型;对于 Android 来说是一个整数。例如:1001,28等。) 12 | val buildShortcutUrl: String, //应用二维码地址 13 | val buildCreated: String, //应用短链接 14 | val buildUpdateDescription: String, //应用更新说明 15 | ) 16 | -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/data/TokenRequest.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy.data 2 | 3 | data class TokenRequest( 4 | val _api_key: String, //(必填) API Key 5 | val buildType: String, //(必填) 需要上传的应用类型,如果是iOS类型请传ios或ipa,如果是Android类型请传android或apk 6 | val oversea: Int? = null, //(选填) 是否使用海外加速上传,值为:1 使用海外加速上传,2 国内加速上传;留空根据 IP 自动判断海外加速或国内加速 7 | val buildInstallType: Int? = null, //(选填)应用安装方式,值为(1,2,3,默认为1 公开安装)。1:公开安装,2:密码安装,3:邀请安装 8 | val buildPassword: String? = null, //(选填) 设置App安装密码,密码为空时默认公开安装 9 | val buildDescription: String? = null, //(选填) 应用介绍,如没有介绍请传空字符串,或不传。 10 | val buildUpdateDescription: String? = null, //(选填) 版本更新描述,请传空字符串,或不传。 11 | val buildInstallDate: Int? = null, //(选填)是否设置安装有效期,值为:1 设置有效时间, 2 长期有效,如果不填写不修改上一次的设置 12 | val buildInstallStartDate: String? = null, //(选填)安装有效期开始时间,字符串型,如:2018-01-01 13 | val buildInstallEndDate: String? = null, //(选填)安装有效期结束时间,字符串型,如:2018-12-31 14 | val buildChannelShortcut: String? = null, //(选填)所需更新指定的渠道短链接,渠道短链接须为已创建成功的,并且只可指定一个渠道,字符串型,如:abcd 15 | ) -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/data/TokenResponse.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy.data 2 | 3 | open class TokenResponse( 4 | val key: String, 5 | val endpoint: String, 6 | val params: Param? = null 7 | ) 8 | 9 | data class Param( 10 | val signature: String, 11 | val `x-cos-security-token`: String, 12 | val key: String 13 | ) -------------------------------------------------------------------------------- /PGYUpload/src/main/kotlin/com/wpf/utils/pgyupload/pgy/http/Callback.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.pgyupload.pgy.http 2 | 3 | interface SuccessCallback: Callback { 4 | 5 | override fun onFail(msg: String) { 6 | 7 | } 8 | } 9 | 10 | interface Callback { 11 | 12 | fun onSuccess(t: T) 13 | 14 | fun onFail(msg: String) 15 | } -------------------------------------------------------------------------------- /Tools/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.jetbrains.kotlin.jvm") 4 | id("maven-publish") 5 | } 6 | 7 | group = "com.wpf.utils" 8 | val versionName = "1.1.20" 9 | version = versionName 10 | 11 | dependencies { 12 | api(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) 13 | api("com.reandroid.arsc:ARSCLib:1.3.5") 14 | api("io.ktor:ktor-client-core:3.0.3") 15 | implementation("io.ktor:ktor-client-cio:3.0.3") 16 | api("ch.qos.logback:logback-classic:1.5.15") 17 | api("commons-codec:commons-codec:1.16.0") 18 | api("com.google.code.gson:gson:2.11.0") 19 | } 20 | 21 | java { 22 | sourceCompatibility = JavaVersion.VERSION_1_8 23 | targetCompatibility = JavaVersion.VERSION_1_8 24 | } 25 | kotlin { 26 | jvmToolchain(8) 27 | } 28 | 29 | afterEvaluate { 30 | publishing { 31 | publications { 32 | create("aliyun") { 33 | from(components["java"]) 34 | groupId = "com.wpf.utils" 35 | artifactId = "tools" 36 | version = versionName 37 | artifact(tasks["kotlinSourcesJar"]) 38 | } 39 | } 40 | repositories { 41 | maven("https://packages.aliyun.com/maven/repository/2428546-release-87ayOu") { 42 | credentials { 43 | username = "653b02ee970dc802e532f004" 44 | password = "ZwOcLGu7St6N" 45 | } 46 | } 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /Tools/src/main/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.wpf.utils.MainKt 3 | 4 | -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/Config.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils 2 | 3 | import java.io.File 4 | 5 | val rootPath = File(".").canonicalPath + File.separator 6 | var curPath = File(".").canonicalPath + File.separator 7 | 8 | val isLinuxRuntime = System.getProperties().getProperty("os.name").contains("Linux") 9 | val isWinRuntime = System.getProperties().getProperty("os.name").contains("Windows") 10 | val isMacRuntime = System.getProperties().getProperty("os.name").contains("Mac") -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/Main.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils 2 | 3 | fun main() { 4 | 5 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/TimeFormat.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils 2 | 3 | fun Long.formatTime(): String { 4 | val minute = (this / 1000) / 60 5 | val second = (this / 1000) % 60 6 | val millis = this % 1000 7 | return if (minute > 0) { 8 | "%02d分%02d秒%02d毫秒".format(minute, second, millis) 9 | } else if (second > 0) { 10 | "%02d秒%02d毫秒".format(second, millis) 11 | } else "%02d毫秒".format(millis) 12 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/ex/FileEx.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.ex 2 | 3 | import org.apache.commons.codec.digest.DigestUtils 4 | import java.io.File 5 | 6 | fun File.createCheck(isFile: Boolean = false, data: ByteArray? = null): File { 7 | if (!exists()) { 8 | if (parentFile?.exists() != true) { 9 | parentFile?.mkdirs() 10 | } 11 | if (isFile) { 12 | if (!exists()) { 13 | createNewFile() 14 | } 15 | } else { 16 | mkdir() 17 | } 18 | } 19 | data?.let { 20 | writeBytes(it) 21 | } 22 | return this 23 | } 24 | 25 | fun File.getChildFileList(): List? { 26 | if (!exists()) return null 27 | if (isFile) return listOf(this) 28 | val childFileList = mutableListOf() 29 | listFiles()?.forEach { 30 | it.getChildFileList()?.let { childList -> 31 | childFileList.addAll(childList) 32 | } 33 | } 34 | return childFileList 35 | } 36 | 37 | fun File.md5(): String { 38 | return DigestUtils.md5Hex(inputStream()) 39 | } 40 | 41 | fun File.delCheck() { 42 | if (exists()) { 43 | deleteRecursively() 44 | } 45 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/ex/StringEx.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.ex 2 | 3 | fun String.subString(firstStr: String, endStr: String): String { 4 | val findStartPos = indexOf(firstStr) 5 | if (findStartPos == -1) { 6 | return "" 7 | } 8 | val findEndPos = indexOf(endStr, findStartPos + firstStr.length) 9 | if (findEndPos == -1) { 10 | return "" 11 | } 12 | return substring(findStartPos + firstStr.length, findEndPos) 13 | } 14 | 15 | fun String.checkWinPath(): String { 16 | return this.replace("\\", "\\\\") 17 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/http/CacheFile.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.http 2 | 3 | import com.wpf.utils.ResourceManager 4 | import com.wpf.utils.ex.createCheck 5 | import io.ktor.client.request.* 6 | import java.io.File 7 | import kotlin.coroutines.resume 8 | import kotlin.coroutines.suspendCoroutine 9 | 10 | object CacheFile { 11 | 12 | /** 13 | * @param outFilePath 下载的文件目录带文件名 14 | */ 15 | fun downloadFile( 16 | serverUrl: String, 17 | request: HttpRequestBuilder.() -> Unit = {}, 18 | outFilePath: String, 19 | callback: ((File?) -> Unit)? = null 20 | ) { 21 | val cacheFile = File(outFilePath) 22 | if (cacheFile.exists() && cacheFile.length() != 0L) { 23 | callback?.invoke(cacheFile) 24 | return 25 | } 26 | cacheFile.createCheck(true) 27 | println("开始下载工具:${cacheFile.name}, 地址:$serverUrl") 28 | HttpClient.downloadFile(serverUrl, request, cacheFile.parent, "", true, callback) 29 | } 30 | 31 | suspend fun downloadFileSuspend( 32 | serverUrl: String, 33 | request: HttpRequestBuilder.() -> Unit = {}, 34 | outFilePath: String, 35 | ): File? { 36 | return suspendCoroutine { continuation -> 37 | downloadFile(serverUrl, request, outFilePath) { 38 | continuation.resume(it) 39 | } 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/DXUtil.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import com.wpf.utils.ResourceManager 4 | import com.wpf.utils.ex.FileUtil 5 | import com.wpf.utils.isLinuxRuntime 6 | import com.wpf.utils.isMacRuntime 7 | import com.wpf.utils.isWinRuntime 8 | import java.io.File 9 | 10 | object DXUtil { 11 | 12 | private val dxPath: String = "" 13 | get() { 14 | if (field.isEmpty() || !File(field).exists()) { 15 | val jadxZipFile = ResourceManager.getResourceFile("dx.zip", isFile = true) 16 | val dxOutPath = jadxZipFile.parent + File.separator + "dx" 17 | val outFile = File(dxOutPath) 18 | if (!outFile.exists() || outFile.listFiles()?.isEmpty() != false) { 19 | FileUtil.unZipFiles(jadxZipFile, dxOutPath) 20 | } 21 | outFile.delete() 22 | return dxOutPath + File.separator + if (isWinRuntime) "dx.bat" else "dx" 23 | } else { 24 | return field 25 | } 26 | } 27 | 28 | fun delJar() { 29 | ResourceManager.delResourceByPath("dx") 30 | } 31 | 32 | fun jar2Dex(jarFilePath: String, dexFilePath: String = ""): Boolean { 33 | if (isLinuxRuntime || isMacRuntime) { 34 | Runtime.getRuntime().exec(arrayOf("chmod", "-R", "777", dxPath)).waitFor() 35 | } 36 | val cmd = arrayOf(dxPath, "--dex", "--output", dexFilePath, jarFilePath) 37 | val process = Runtime.getRuntime().exec(cmd) 38 | LogStreamThread(process.inputStream).start() 39 | LogStreamThread(process.errorStream).start() 40 | val result = process.waitFor() 41 | process.destroy() 42 | return result == 0 43 | } 44 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/JADXUtil.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import com.wpf.utils.ResourceManager 4 | import com.wpf.utils.ex.FileUtil 5 | import com.wpf.utils.isLinuxRuntime 6 | import com.wpf.utils.isMacRuntime 7 | import com.wpf.utils.isWinRuntime 8 | import java.io.File 9 | 10 | object JADXUtil { 11 | 12 | private var jadxOutPath: String = "" 13 | private val jadxPath: String = "" 14 | get() { 15 | if (field.isEmpty() || !File(field).exists()) { 16 | val jadxZipFile = ResourceManager.getResourceFile("jadx-1.4.7.zip", isFile = true) 17 | jadxOutPath = jadxZipFile.parent + File.separator + "jadx-1.4.7" + File.separator 18 | val outFile = File(jadxOutPath) 19 | if (!outFile.exists() || outFile.listFiles()?.isEmpty() != false) { 20 | FileUtil.unZipFiles(jadxZipFile, jadxOutPath) 21 | } 22 | return jadxOutPath + "bin" + File.separator + if (isWinRuntime) "jadx.bat" else "jadx" 23 | } else { 24 | return field 25 | } 26 | } 27 | 28 | fun delJar() { 29 | ResourceManager.delResourceByPath("jadx-1.4.7") 30 | } 31 | 32 | /** 33 | * jadx-1.4.7/bin/jadx -d "/mnt/d/Android/Android Project/AutoDebug" --single-class "cn.goodjobs.community.SophixStubApplication" classes.dex 34 | */ 35 | fun getJavaInDex(findJavaFile: String, outJavaPath: String, dexPath: String): Boolean { 36 | if (isLinuxRuntime || isMacRuntime) { 37 | Runtime.getRuntime().exec(arrayOf("chmod", "-R", "777", jadxPath)).waitFor() 38 | } 39 | val cmd = arrayOf(jadxPath, "-d", outJavaPath, "--single-class", findJavaFile, dexPath) 40 | val process = Runtime.getRuntime().exec(cmd) 41 | LogStreamThread(process.inputStream, false) { 42 | !it.contains("Saving class") 43 | }.start() 44 | val result = process.waitFor() 45 | process.destroy() 46 | return result == 0 47 | } 48 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/LogStreamThread.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import com.wpf.utils.isWinRuntime 4 | import java.io.BufferedReader 5 | import java.io.InputStream 6 | import java.io.InputStreamReader 7 | import java.nio.charset.Charset 8 | 9 | class LogStreamThread( 10 | private val inputStream: InputStream, 11 | private val showLogInLine: Boolean = true, 12 | private val showAllLog: ((log: String) -> Boolean)? = null 13 | ) : Thread() { 14 | override fun run() { 15 | super.run() 16 | val reader = InputStreamReader(inputStream, Charset.forName(if (isWinRuntime) "GBK" else "utf-8")) 17 | val bf = BufferedReader(reader) 18 | var line: String? 19 | val showAll = showAllLog != null 20 | val allLogBuilder = StringBuilder() 21 | kotlin.runCatching { 22 | do { 23 | line = bf.readLine() 24 | if (showAll) { 25 | allLogBuilder.append(line) 26 | } 27 | if (line != null) { 28 | if (showLogInLine) { 29 | println(line) 30 | } 31 | } 32 | } while (line != null) 33 | inputStream.close() 34 | if (showAll) { 35 | val allLog = allLogBuilder.toString() 36 | if (showAllLog?.invoke(allLog) == true) { 37 | println(allLog) 38 | } 39 | } 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/ManifestEditorUtil.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import com.wpf.utils.ResourceManager 4 | import java.io.File 5 | 6 | /** 7 | * 映射到命令 8 | */ 9 | 10 | object ManifestEditorUtil { 11 | private val manifestEditorPath: String = "" 12 | get() { 13 | return if (field.isEmpty() || !File(field).exists()) { 14 | ResourceManager.getResourceFile("ManifestEditor.jar").path 15 | } else field 16 | } 17 | 18 | fun delJar() { 19 | ResourceManager.delResourceByPath(manifestEditorPath) 20 | } 21 | 22 | /** 23 | * 操作 24 | */ 25 | fun doCommand(cmd: MutableList) { 26 | val result = Runtime.getRuntime().exec(RunJar.javaJar(manifestEditorPath, cmd.toTypedArray())) 27 | LogStreamThread(result.errorStream, false) { 28 | it.isNotEmpty() && "null" != it 29 | }.start() 30 | result.waitFor() 31 | result.destroy() 32 | } 33 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/ProgressUtil.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import com.wpf.utils.isMacRuntime 4 | import com.wpf.utils.isWinRuntime 5 | 6 | object ProgressUtil { 7 | 8 | fun stop(pid: String) { 9 | runCatching { 10 | val killP = if (isMacRuntime) { 11 | Runtime.getRuntime().exec("kill -9 $pid") 12 | } else if (isWinRuntime) { 13 | Runtime.getRuntime().exec("cmd /c taskkill /PID $pid /F /T") 14 | } else { 15 | Runtime.getRuntime().exec("kill $pid") 16 | } 17 | LogStreamThread(killP.inputStream, true).start() 18 | LogStreamThread(killP.errorStream, true).start() 19 | }.getOrElse { 20 | println("无法停止进程($pid):" + it.message) 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/RunJar.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | object RunJar { 4 | 5 | fun javaJar(jarFile: String, cmd: Array) = arrayListOf("java", "-jar", jarFile).also { 6 | it.addAll(cmd) 7 | }.toTypedArray() 8 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/SignHelper.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import java.io.File 4 | 5 | object SignHelper { 6 | 7 | fun sign( 8 | signFile: String, 9 | signAlias: String, 10 | keyStorePassword: String, 11 | keyPassword: String, 12 | outApkPath: String = "", 13 | inputApkPath: String, 14 | reserveInput: Boolean = true //是否保留源文件 15 | ): String { 16 | val srcApkFile = File(inputApkPath) 17 | if (!srcApkFile.exists() || srcApkFile.extension != "apk") { 18 | println("待签名的apk不存在") 19 | return "" 20 | } 21 | if (ApkSignerUtil.isSign(inputApkPath)) { 22 | println("$inputApkPath 已签名") 23 | return "" 24 | } 25 | var outSignPathTemp = 26 | srcApkFile.parent + File.separator + srcApkFile.nameWithoutExtension + "_sign." + srcApkFile.extension + ".tmp" 27 | if (!ZipalignUtil.check(inputApkPath)) { 28 | val result = ZipalignUtil.zipalign(inputApkPath, outSignPathTemp, false) 29 | if (!result) { 30 | File(outSignPathTemp).delete() 31 | return "" 32 | } 33 | } else { 34 | outSignPathTemp = inputApkPath 35 | } 36 | val outSignPath = outApkPath.ifEmpty { 37 | srcApkFile.parent + File.separator + srcApkFile.nameWithoutExtension.replace( 38 | "_sign", 39 | "" 40 | ) + "_sign." + srcApkFile.extension 41 | } 42 | ApkSignerUtil.sign( 43 | signFile, 44 | signAlias, 45 | keyStorePassword, 46 | keyPassword, 47 | outSignPath = outSignPath, 48 | inputApkPath = outSignPathTemp, 49 | false 50 | ) 51 | if (!reserveInput) { 52 | srcApkFile.delete() 53 | } 54 | if (outSignPathTemp != inputApkPath || !reserveInput) { 55 | File(outSignPathTemp).delete() 56 | } 57 | return outSignPath 58 | } 59 | } -------------------------------------------------------------------------------- /Tools/src/main/kotlin/com/wpf/utils/tools/SophixPatchBaseTool.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.tools 2 | 3 | import com.wpf.utils.ResourceManager 4 | import java.io.File 5 | 6 | abstract class SophixPatchBaseTool { 7 | open val profilesJsonFile: File? = null 8 | get() { 9 | return if (field == null || !field.exists()) { 10 | ResourceManager.getResourceFile("SophixPatchTool/profiles.json", overwrite = true) 11 | } else field 12 | } 13 | 14 | open fun delJar() { 15 | profilesJsonFile?.path?.let { 16 | ResourceManager.delResourceByPath(it) 17 | } 18 | } 19 | 20 | abstract fun deal(configPath: String): Boolean 21 | } -------------------------------------------------------------------------------- /WebView/src/commonMain/kotlin/com/wpf/util/webview/DevToolsWebSocket.kt: -------------------------------------------------------------------------------- 1 | //package com.wpf.util.webview 2 | // 3 | //import com.wpf.util.webview.DevToolsDebuggerServer.sendMessageToBrowser 4 | //import com.wpf.util.webview.DevToolsDebuggerServer.servletContext 5 | //import org.eclipse.jetty.websocket.api.Session 6 | //import org.eclipse.jetty.websocket.api.WebSocketListener 7 | //import java.io.IOException 8 | //import java.text.MessageFormat 9 | //import javax.servlet.ServletContext 10 | // 11 | //class DevToolsWebSocket : WebSocketListener { 12 | // private var session: Session? = null 13 | // private val context: ServletContext? 14 | // 15 | // init { 16 | // context = servletContext 17 | // } 18 | // 19 | // override fun onWebSocketConnect(session: Session) { 20 | // this.session = session 21 | // if (context!!.getAttribute(WEB_SOCKET_ATTR_NAME) != null) { 22 | // session.close() 23 | // println("Another client is already connected. Connection refused") 24 | // } else { 25 | // context.setAttribute(WEB_SOCKET_ATTR_NAME, this) 26 | // println("Client connected") 27 | // } 28 | // } 29 | // 30 | // override fun onWebSocketClose(closeCode: Int, message: String) { 31 | // val mainSocket = context!!.getAttribute(WEB_SOCKET_ATTR_NAME) as DevToolsWebSocket 32 | // if (mainSocket === this) { 33 | // context.removeAttribute(WEB_SOCKET_ATTR_NAME) 34 | // println("Client disconnected") 35 | // } 36 | // } 37 | // 38 | // @Throws(IOException::class) 39 | // fun sendMessage(data: String?) { 40 | // val remote = session!!.remote 41 | // remote.sendString(data) 42 | // } 43 | // 44 | // override fun onWebSocketText(data: String) { 45 | // sendMessageToBrowser(data) 46 | // } 47 | // 48 | // override fun onWebSocketError(t: Throwable) { 49 | // val errorMessage = t.message 50 | // println(MessageFormat.format("WebSocket error occurred: {0}", errorMessage)) 51 | // } 52 | // 53 | // override fun onWebSocketBinary(arg0: ByteArray, arg1: Int, arg2: Int) {} 54 | // 55 | // companion object { 56 | // const val WEB_SOCKET_ATTR_NAME = "org.javafx.devtools.DevToolsWebSocket" 57 | // } 58 | //} -------------------------------------------------------------------------------- /WebView/src/commonMain/kotlin/com/wpf/util/webview/DevToolsWebSocketServlet.kt: -------------------------------------------------------------------------------- 1 | //package com.wpf.util.webview 2 | // 3 | //import org.eclipse.jetty.websocket.servlet.WebSocketServlet 4 | //import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory 5 | // 6 | //class DevToolsWebSocketServlet : WebSocketServlet() { 7 | // override fun configure(factory: WebSocketServletFactory) { 8 | // factory.register(DevToolsWebSocket::class.java) 9 | // } 10 | // 11 | // companion object { 12 | // private const val serialVersionUID = 1L 13 | // } 14 | //} -------------------------------------------------------------------------------- /WebView/src/commonMain/kotlin/com/wpf/util/webview/JavaBridge.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.webview 2 | 3 | class JavaBridge { 4 | fun log(text: String?) { 5 | println(text) 6 | } 7 | 8 | fun error(text: String?) { 9 | System.err.println(text) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /WebView/src/desktopMain/kotlin/com/wpf/util/webview/CookieManagerCompat.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.webview 2 | 3 | import java.net.CookieHandler 4 | import java.net.URI 5 | import java.util.LinkedHashMap 6 | 7 | actual object CookieManagerCompat { 8 | 9 | actual fun setCookie(url: String, headers: MutableMap) { 10 | val uri: URI = URI.create(url) 11 | var stringList: List = headers.map { 12 | "${it.key}=${it.value}" 13 | } 14 | if (headers.size == 1 && headers.containsKey("Cookie")) { 15 | stringList = mutableListOf("Cookie=" + headers["Cookie"]) 16 | } 17 | val headersCookie: MutableMap> = LinkedHashMap() 18 | headersCookie["Set-Cookie"] = stringList 19 | CookieHandler.getDefault().put(uri, headersCookie) 20 | } 21 | 22 | actual fun setCookie(url: String, cookies: List) { 23 | val uri: URI = URI.create(url) 24 | val headersCookie: MutableMap> = LinkedHashMap() 25 | headersCookie["Set-Cookie"] = cookies 26 | CookieHandler.getDefault().put(uri, headersCookie) 27 | } 28 | 29 | actual fun getCookie(uri: URI): MutableMap? { 30 | return CookieHandler.getDefault().get(uri, java.util.HashMap()).map { 31 | it.key to it.value[0] 32 | }.toMap().toMutableMap() 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /WebView/src/desktopMain/kotlin/com/wpf/util/webview/WebViewImpl.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.webview 2 | 3 | import androidx.compose.runtime.Composable 4 | import androidx.compose.ui.Modifier 5 | import javafx.scene.web.WebView 6 | 7 | 8 | @Composable 9 | internal actual fun WebViewImpl( 10 | state: WebViewState, 11 | modifier: Modifier, 12 | navigator: WebViewNavigator, 13 | onCreated: WebView.() -> Unit, 14 | onDispose: WebView.() -> Unit, 15 | ) { 16 | 17 | //The results of running in run and debug modes are different, which made me realize that WebEngine variables 18 | // are local variables, and the monitoring events inside are recycled by gc before they are executed. 19 | WebViewDesktop(state, modifier, navigator, onCreated = onCreated, onDispose = onDispose) 20 | } 21 | 22 | -------------------------------------------------------------------------------- /WebView/src/desktopMain/kotlin/com/wpf/util/webview/utils/WebViewJavaAgent.kt: -------------------------------------------------------------------------------- 1 | //package com.wpf.util.webview.utils 2 | // 3 | //import java.lang.instrument.Instrumentation 4 | // 5 | // 6 | //object WebViewJavaAgent { 7 | // 8 | // fun agentmain(agentArgument: String, instrumentation: Instrumentation) { 9 | // instrumentation.addTransformer(ClassTransformer()) 10 | // } 11 | //} -------------------------------------------------------------------------------- /base/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build/ 3 | !gradle/wrapper/gradle-wrapper.jar 4 | !**/src/main/**/build/ 5 | !**/src/test/**/build/ 6 | 7 | ### IntelliJ IDEA ### 8 | .idea/modules.xml 9 | .idea/jarRepositories.xml 10 | .idea/compiler.xml 11 | .idea/libraries/ 12 | *.iws 13 | *.iml 14 | *.ipr 15 | out/ 16 | !**/src/main/**/out/ 17 | !**/src/test/**/out/ 18 | 19 | ### Eclipse ### 20 | .apt_generated 21 | .classpath 22 | .factorypath 23 | .project 24 | .settings 25 | .springBeans 26 | .sts4-cache 27 | bin/ 28 | !**/src/main/**/bin/ 29 | !**/src/test/**/bin/ 30 | 31 | ### NetBeans ### 32 | /nbproject/private/ 33 | /nbbuild/ 34 | /dist/ 35 | /nbdist/ 36 | /.nb-gradle/ 37 | 38 | ### VS Code ### 39 | .vscode/ 40 | 41 | ### Mac OS ### 42 | .DS_Store -------------------------------------------------------------------------------- /base/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kotlin") 3 | } 4 | 5 | group = "com.wpf.util" 6 | version = "1.0-SNAPSHOT" 7 | 8 | repositories { 9 | mavenCentral() 10 | } 11 | 12 | dependencies { 13 | implementation("net.dongliu:apk-parser:2.6.10") 14 | api("com.wpf.utils:tools:1.1.18") 15 | api("com.android:zipflinger:7.3.1") //压缩包操作 16 | // implementation(project(":AXMLEditor3")) 17 | // implementation("co.touchlab:kermit:2.0.0-RC4") //日志保存 18 | implementation(kotlin("stdlib-jdk8")) 19 | } 20 | 21 | java { 22 | sourceCompatibility = JavaVersion.VERSION_1_8 23 | targetCompatibility = JavaVersion.VERSION_1_8 24 | } 25 | kotlin { 26 | jvmToolchain(8) 27 | } 28 | 29 | tasks.register("打渠道包并签名打包", Jar::class) { 30 | group = "jar" 31 | archiveFileName = "打渠道包并签名.jar" 32 | destinationDirectory.set(file("D:\\Android\\ShareFile\\tools")) 33 | manifest { 34 | attributes["Main-Class"] = "com.wpf.base.dealfile.MainKt" 35 | attributes["Manifest-Version"] = "1.0.1" 36 | } 37 | from( 38 | sourceSets.main.get().output, 39 | configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) } 40 | ) 41 | exclude( 42 | "META-INF/*.RSA", 43 | "META-INF/*.SF", 44 | "META-INF/*.DSA", 45 | "META-INF/LICENSE.txt", 46 | "META-INF/NOTICE.txt", 47 | "META-INF/versions/9/module-info.class", 48 | "module-info.class", 49 | "META-INF/INDEX.LIST" 50 | ) 51 | } -------------------------------------------------------------------------------- /base/src/main/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.wpf.base.dealfile.MainKt 3 | 4 | -------------------------------------------------------------------------------- /base/src/main/java/com/wpf/base/dealfile/Config.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.base.dealfile 2 | 3 | //渠道基础文件路径 4 | var channelBaseInsertFilePath = "" 5 | 6 | //存储渠道包位置 7 | var channelSavePath = "" 8 | 9 | //友盟渠道配置位置 10 | var channelsFilePath = "" 11 | 12 | //签名文件 13 | var signFile = "" 14 | 15 | //签名文件密码 16 | var signPassword = "" 17 | 18 | //签名文件别名 19 | var signAlias = "" 20 | 21 | //签名文件别名密码 22 | var signAliasPassword = "" 23 | 24 | //是否签名后删除渠道包 25 | var delApkAfterSign = false -------------------------------------------------------------------------------- /base/src/main/java/com/wpf/base/dealfile/util/ThreadPoolHelper.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.base.dealfile.util 2 | 3 | import java.util.concurrent.Callable 4 | import java.util.concurrent.ExecutorService 5 | import java.util.concurrent.Executors 6 | 7 | object ThreadPoolHelper { 8 | private val executorsPool: ExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()) 9 | 10 | fun run( 11 | runnable: List>?, 12 | finish: ((List?) -> Unit)? = null 13 | ) { 14 | if (runnable.isNullOrEmpty()) { 15 | finish?.invoke(null) 16 | return 17 | } 18 | val result: List = executorsPool.invokeAll(runnable).map { 19 | it.get() 20 | } 21 | finish?.invoke(result) 22 | } 23 | } -------------------------------------------------------------------------------- /base/src/main/java/com/wpf/base/dealfile/util/TimeFormat.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.base.dealfile.util 2 | 3 | fun Long.formatTime(): String { 4 | val minute = (this / 1000) / 60 5 | val second = (this / 1000) % 60 6 | val millis = this % 1000 7 | return if (minute > 0) { 8 | "%02d分%02d秒%02d毫秒".format(minute, second, millis) 9 | } else if (second > 0) { 10 | "%02d秒%02d毫秒".format(second, millis) 11 | } else "%02d毫秒".format(millis) 12 | } -------------------------------------------------------------------------------- /base/src/main/resources/AXMLEditor2Github.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/base/src/main/resources/AXMLEditor2Github.jar -------------------------------------------------------------------------------- /base/src/main/resources/apksigner.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/base/src/main/resources/apksigner.jar -------------------------------------------------------------------------------- /base/src/main/resources/zipalign/zipalign.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/base/src/main/resources/zipalign/zipalign.exe -------------------------------------------------------------------------------- /base/src/main/resources/zipalign/zipalign_linux.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/base/src/main/resources/zipalign/zipalign_linux.zip -------------------------------------------------------------------------------- /base/src/main/resources/zipalign/zipalign_mac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/base/src/main/resources/zipalign/zipalign_mac -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | group = "com.wpf.compose.desktop" 2 | version = "1.0-SNAPSHOT" 3 | 4 | allprojects { 5 | repositories { 6 | mavenLocal() 7 | maven("https://maven.aliyun.com/repository/public") 8 | maven("https://maven.aliyun.com/repository/central") 9 | maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") 10 | maven("https://gitlab.com/api/v4/projects/38224197/packages/maven") 11 | maven("https://packages.aliyun.com/maven/repository/2428546-release-87ayOu") { 12 | credentials { 13 | username = "653b02ee970dc802e532f004" 14 | password = "ZwOcLGu7St6N" 15 | } 16 | } 17 | google() 18 | mavenCentral() 19 | } 20 | } 21 | 22 | plugins { 23 | id("com.android.application") version "7.4.2" apply false 24 | kotlin("multiplatform") apply false 25 | kotlin("plugin.serialization") apply false 26 | id("org.jetbrains.compose") apply false 27 | } 28 | -------------------------------------------------------------------------------- /common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | kotlin("multiplatform") 3 | kotlin("plugin.serialization") 4 | id("org.jetbrains.compose") 5 | } 6 | 7 | group = "com.wpf.compose.common" 8 | version = "1.0-SNAPSHOT" 9 | 10 | kotlin { 11 | jvm("desktop") { 12 | jvmToolchain(17) 13 | } 14 | sourceSets { 15 | val commonMain by getting { 16 | dependencies { 17 | api(compose.runtime) 18 | api(compose.foundation) 19 | api(compose.material) 20 | api(files("libs/bcprov-jdk18on.jar")) 21 | api(project(":base")) 22 | api(project(":WebView")) 23 | api(project(":dealJiagu")) 24 | api("org.apache.directory.studio:org.apache.commons.codec:1.8") 25 | // api("org.bouncycastle:bcprov-jdk18on:1.80") 26 | api("net.dongliu:apk-parser:2.6.10") 27 | api("io.ktor:ktor-server-auto-head-response:2.3.7") 28 | api("io.ktor:ktor-client-core:2.3.7") 29 | api("io.ktor:ktor-client-cio:2.3.7") 30 | api("io.ktor:ktor-client-content-negotiation:2.3.7") 31 | api("io.ktor:ktor-serialization-kotlinx-json:2.3.7") 32 | api("io.ktor:ktor-client-logging:2.3.7") 33 | api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2") 34 | api("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.7.2") 35 | api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0") 36 | api("com.russhwolf:multiplatform-settings-no-arg:1.1.1") 37 | api("com.google.code.gson:gson:2.10.1") 38 | api("com.auth0:java-jwt:4.4.0") 39 | api("com.fasterxml.jackson.core:jackson-core:2.16.1") 40 | api("com.fasterxml.jackson.core:jackson-databind:2.16.1") 41 | api("com.github.winterreisender:webviewko-jvm:0.6.0") 42 | api("androidx.compose.ui:ui-util-desktop:1.6.0-beta02") 43 | } 44 | } 45 | val desktopMain by getting { 46 | dependencies { 47 | api(compose.preview) 48 | } 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /common/libs/bcprov-jdk18on.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/common/libs/bcprov-jdk18on.jar -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/UiConfig.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui 2 | 3 | import androidx.compose.foundation.Image 4 | import androidx.compose.foundation.layout.Box 5 | import androidx.compose.foundation.layout.BoxScope 6 | import androidx.compose.foundation.layout.fillMaxSize 7 | import androidx.compose.foundation.layout.size 8 | import androidx.compose.material.icons.Icons 9 | import androidx.compose.material.icons.filled.Close 10 | import androidx.compose.material.Icon 11 | import androidx.compose.runtime.Composable 12 | import androidx.compose.ui.Modifier 13 | import androidx.compose.ui.graphics.Color 14 | import androidx.compose.ui.res.painterResource 15 | import androidx.compose.ui.unit.dp 16 | 17 | val itemBgColor = Color(1f, 1f, 1f, 0.6f) 18 | val mainTextColor = Color(98, 88, 179) 19 | val mainBgColor = Color(28, 30, 46) 20 | val centerBgColor = Color(234, 234, 245) 21 | 22 | @Composable 23 | fun closeIcon() = Icon(Icons.Default.Close, "失败") 24 | 25 | @Composable 26 | fun size24(content: @Composable BoxScope.() -> Unit) { 27 | Box( 28 | modifier = Modifier.size(24.dp), content = content 29 | ) 30 | } 31 | @Composable 32 | fun size44(content: @Composable BoxScope.() -> Unit) { 33 | Box( 34 | modifier = Modifier.size(44.dp), content = content 35 | ) 36 | } 37 | 38 | @Composable 39 | fun icon() = size44 { 40 | Image( 41 | painterResource("/icon.png"), contentDescription = "icon", modifier = Modifier.fillMaxSize() 42 | ) 43 | } 44 | 45 | @Composable 46 | fun apiIcon() = size24 { 47 | Image( 48 | painter = painterResource("/image/api.png"), contentDescription = "api上传", modifier = Modifier.fillMaxSize() 49 | ) 50 | } 51 | 52 | @Composable 53 | fun uploadIcon() = size24 { 54 | Image( 55 | painter = painterResource("/image/upload.png"), 56 | contentDescription = "上传市场", 57 | modifier = Modifier.fillMaxSize() 58 | ) 59 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/base/Apk.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.base 2 | 3 | import com.wpf.util.common.ui.marketplace.markets.base.MarketType 4 | import com.wpf.util.common.ui.utils.abiType 5 | import com.wpf.util.common.ui.utils.channelName 6 | import kotlinx.serialization.Serializable 7 | import net.dongliu.apk.parser.ApkFile 8 | 9 | enum class AbiType(val type: String) { 10 | Abi32("armeabi-v7a"), 11 | Abi64("arm64-v8a"), 12 | Abi32_64("universal"), 13 | } 14 | @Serializable 15 | data class Apk( 16 | val name: String, 17 | val size: Long, 18 | val filePath: String, 19 | val fileName: String, 20 | var appIcon: String? = null, 21 | var appName: String = "", 22 | var packageName: String = "", 23 | var versionName: String = "1.0.0", 24 | var versionCode: String = "1", 25 | var abi: AbiType = AbiType.Abi32_64, 26 | var channelName: String = "", 27 | ) { 28 | init { 29 | channelName = name.channelName() ?: "" 30 | abi = name.abiType() 31 | val apkInfo = ApkFile(filePath) 32 | val apkMeta = apkInfo.apkMeta 33 | appName = apkMeta.label 34 | packageName = apkMeta.packageName 35 | versionName = apkMeta.versionName 36 | versionCode = apkMeta.versionCode.toString() 37 | } 38 | } 39 | 40 | 41 | fun Apk.canApi(): Boolean { 42 | return MarketType.values().find { market -> 43 | channelName.contains(market.channelName, ignoreCase = true) 44 | }?.isApi() ?: false 45 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/base/Group.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.base 2 | 3 | import androidx.compose.runtime.MutableState 4 | import androidx.compose.runtime.mutableStateOf 5 | import kotlinx.serialization.Serializable 6 | import kotlinx.serialization.Transient 7 | 8 | @Serializable 9 | open class Group( 10 | @kotlin.jvm.Transient @Transient open var name: String = "", 11 | @kotlin.jvm.Transient @Transient override var isSelect: Boolean = false, 12 | ): SelectItem(isSelect) { 13 | 14 | @kotlin.jvm.Transient @Transient 15 | open var nameState: MutableState = mutableStateOf(name) 16 | get() { 17 | if (field == null) field = mutableStateOf(name) 18 | field.value = name 19 | return field 20 | } 21 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/base/Menu.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.base 2 | 3 | data class Menu( 4 | val menuName: String, 5 | override var isSelect: Boolean = false 6 | ): SelectItem() -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/base/SelectInterface.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.base 2 | 3 | import androidx.compose.runtime.MutableState 4 | 5 | interface SelectInterface { 6 | 7 | val isSelectState: MutableState 8 | 9 | fun click() { 10 | 11 | } 12 | 13 | var isSelect: Boolean 14 | fun changeSelect(isSelect: Boolean) { 15 | this.isSelect = isSelect 16 | isSelectState.value = isSelect 17 | } 18 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/base/SelectItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.base 2 | 3 | import androidx.compose.runtime.mutableStateOf 4 | import kotlinx.serialization.Serializable 5 | import kotlinx.serialization.Transient 6 | 7 | @Serializable 8 | open class SelectItem( 9 | @kotlin.jvm.Transient @Transient open var isSelect: Boolean = false 10 | ) { 11 | @kotlin.jvm.Transient @Transient 12 | open var isSelectState = mutableStateOf(isSelect) 13 | get() { 14 | if (field == null) field = mutableStateOf(isSelect) 15 | field.value = isSelect 16 | return field 17 | } 18 | set(value) { 19 | field.value = value.value 20 | isSelect = field.value 21 | field = value 22 | } 23 | 24 | open fun click(): Boolean { 25 | isSelect = !isSelect 26 | isSelectState.value = isSelect 27 | return isSelect 28 | } 29 | 30 | fun changeSelect(isSelect: Boolean) { 31 | this.isSelect = isSelect 32 | isSelectState.value = isSelect 33 | } 34 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/channelset/Client.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.channelset 2 | 3 | import com.wpf.util.common.ui.base.Group 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | class Client( 8 | var id: String, 9 | override var name: String = "", 10 | override var isSelect: Boolean = false, 11 | var channelPath: String = "" 12 | ) : Group(name, isSelect) -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/channelset/Path.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.channelset 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Path( 7 | val name: String, 8 | val path: String 9 | ) -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/configset/ConfigPageViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.configset 2 | 3 | import com.wpf.util.common.ui.utils.settings 4 | 5 | object ConfigPageViewModel { 6 | fun getChannelBaseFilePath() = settings.getString("channelBaseFilePath", "") 7 | 8 | fun getChannelSaveFilePath() = settings.getString("channelSaveFilePath", "") 9 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/marketplace/markets/UnknownMarket.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.marketplace.markets 2 | 3 | import com.wpf.util.common.ui.base.AbiType 4 | import com.wpf.util.common.ui.marketplace.markets.base.Market 5 | import com.wpf.util.common.ui.marketplace.markets.base.MarketType 6 | import com.wpf.util.common.ui.marketplace.markets.base.UploadData 7 | import com.wpf.util.common.ui.utils.Callback 8 | 9 | class UnknownMarket: Market { 10 | 11 | override var isSelect: Boolean = false 12 | 13 | override val name: String = MarketType.未知.channelName 14 | 15 | @Transient 16 | override val baseUrl: String = "" 17 | 18 | override fun uploadAbi(): Array = arrayOf(AbiType.Abi32_64) 19 | 20 | override fun push(uploadData: UploadData, callback: Callback) { 21 | 22 | } 23 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/marketplace/markets/base/MarketApk.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.marketplace.markets.base 2 | 3 | import androidx.compose.runtime.mutableStateOf 4 | import com.wpf.util.common.ui.base.Apk 5 | import com.wpf.util.common.ui.base.SelectItem 6 | 7 | data class MarketApk( 8 | val marketType: MarketType, 9 | val channelName: String, 10 | val abiApk: MutableList = mutableListOf() 11 | ) : SelectItem() { 12 | 13 | override var isSelect: Boolean = false 14 | 15 | val uploadState = mutableStateOf(UploadState.UPLOAD_WAIT) //上传状态 16 | 17 | fun packageName() = abiApk[0].packageName 18 | 19 | fun versionCode() = abiApk[0].versionCode 20 | 21 | fun versionName() = abiApk[0].versionName 22 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/marketplace/markets/base/MarketType.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.marketplace.markets.base 2 | 3 | import com.wpf.util.common.ui.marketplace.markets.* 4 | import kotlin.reflect.KClass 5 | 6 | /** 7 | * 支持平台 8 | */ 9 | enum class MarketType(val channelName: String, val market: KClass = UnknownMarket::class) { 10 | qh360("360", market = QH360Market::class), 11 | 百度("Baidu"), 12 | 应用宝("QQ"), 13 | 魅族("Meizu"), 14 | 三星("Samsung", market = SamsungMarket::class), 15 | 小米("Xiaomi", market = XiaomiMarket::class), 16 | 华为("Huawei", market = HuaweiMarket::class), 17 | Oppo("Oppo", market = OppoMarket::class), 18 | Vivo("Vivo", market = VivoMarket::class), 19 | 未知("Unknown"), 20 | ; 21 | 22 | fun isApi(): Boolean { 23 | return market != UnknownMarket::class 24 | } 25 | 26 | fun isBrowser() = market is BrowserMarket 27 | } 28 | 29 | object MarketTypeHelper { 30 | fun find(channelName: String): MarketType? { 31 | return MarketType.entries.find { 32 | it.channelName == channelName 33 | } 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/marketplace/markets/base/UploadData.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.marketplace.markets.base 2 | 3 | import com.wpf.util.common.ui.channelset.ChannelSetViewModel 4 | import com.wpf.util.common.ui.marketplace.MarketPlaceViewModel 5 | import com.wpf.util.common.ui.utils.Callback 6 | 7 | data class UploadData( 8 | val apk: MarketApk, 9 | val description: String, //更新文案 10 | val leaveMessage: String?, //留言 11 | val imageList: List? = null 12 | ) 13 | 14 | fun UploadData.upload() { 15 | apk.uploadState.value = UploadState.UPLOADING 16 | MarketPlaceViewModel.getSelectMarket( 17 | ChannelSetViewModel.getClientList().find { it.isSelect }?.id ?: "", 18 | MarketPlaceViewModel.getCanApiMarketList().find { it.name == apk.channelName }?.name ?: "" 19 | )?.push(this, object : Callback { 20 | override fun onSuccess(t: MarketType) { 21 | apk.uploadState.value = UploadState.UPLOAD_SUCCESS 22 | apk.changeSelect(false) 23 | } 24 | 25 | override fun onFail(msg: String) { 26 | apk.uploadState.value = UploadState.UPLOAD_FAIL 27 | } 28 | 29 | }) 30 | } 31 | 32 | fun UploadData.packageName() = apk.abiApk.getOrNull(0)?.packageName 33 | fun UploadData.versionCode() = apk.abiApk.getOrNull(0)?.versionCode 34 | fun UploadData.versionName() = apk.abiApk.getOrNull(0)?.versionName -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/marketplace/markets/base/UploadState.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.marketplace.markets.base 2 | 3 | enum class UploadState { 4 | UPLOAD_WAIT, 5 | UPLOADING, 6 | UPLOAD_SUCCESS, 7 | UPLOAD_FAIL, 8 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/marketplace/markets/base/XiaomiPushData.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.marketplace.markets.base 2 | 3 | import java.io.File 4 | 5 | data class XiaomiPushData( 6 | val userName: String, //用户名,在小米开发者站登录的邮箱 7 | val synchroType: Int = 1, //更新类型:0=新增,1=更新包,2=内容更新 8 | val appInfo: XiaomiApk, //应用包实体JSON 字符串 9 | @Transient val apk: File, //应用包实体 10 | @Transient val secondApk: File?, //应用包实体 11 | @Transient val icon: File? = null, //应用包Icon 12 | @Transient val screenShot1: File?= null, //应用的第1 幅截图,synchroType=0 时必选 13 | @Transient val screenShot2: File?= null, //应用的第2 幅截图,synchroType=0 时必选 14 | @Transient val screenShot3: File?= null, //应用的第3 幅截图,synchroType=0 时必选 15 | @Transient val screenShot4: File?= null, //应用的第4 幅截图,synchroType=0 时必选 16 | @Transient val screenShot5: File?= null, //应用的第5 幅截图,synchroType=0 时必选 17 | ) 18 | 19 | 20 | data class XiaomiApk( 21 | val appName: String, 22 | val packageName: String, 23 | val publisherName: String? = null, 24 | val versionName: String? = null, 25 | val category: String? = null, 26 | val keyWords: String? = null, 27 | val desc: String? = null, 28 | val updateDesc: String, 29 | val shortDesc: String? = null, 30 | val web: String? = null, 31 | val price: String? = null, 32 | val privacyUrl: String? = null, 33 | ) -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/signset/SignFile.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.signset 2 | 3 | import com.wpf.util.common.ui.base.SelectItem 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | class SignFile( 8 | var name: String = "", //签名名称 9 | var storeFile: String = "", //签名文件 10 | var storePass: String = "", //密码 11 | var keyAlias: String = "", //别名 12 | var keyPass: String = "", //密码 13 | override var isSelect: Boolean = false 14 | ): SelectItem() -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/signset/SignSetViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.signset 2 | 3 | object SignSetViewModel { 4 | 5 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/utils/AutoSave.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.utils 2 | 3 | interface AutoSave { 4 | 5 | fun keyMove(oldKey: String, newKey: String) { 6 | val data = settings.getString(oldKey, "") 7 | if (data.isNotEmpty()) { 8 | settings.putString(newKey, data) 9 | settings.remove(oldKey) 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/utils/Callback.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.utils 2 | 3 | interface SuccessCallback: Callback { 4 | 5 | override fun onFail(msg: String) { 6 | 7 | } 8 | } 9 | 10 | interface Callback { 11 | 12 | fun onSuccess(t: T) 13 | 14 | fun onFail(msg: String) 15 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/utils/Data.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.utils 2 | 3 | import com.google.gson.Gson 4 | import com.google.gson.GsonBuilder 5 | import com.russhwolf.settings.Settings 6 | import kotlinx.serialization.json.Json 7 | 8 | val gson = Gson() 9 | val mapGson = GsonBuilder().disableHtmlEscaping().create() 10 | val json = Json { encodeDefaults = true } 11 | val settings = Settings() -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/utils/DropBoxPanel.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.utils 2 | 3 | import androidx.compose.foundation.layout.Box 4 | import androidx.compose.foundation.layout.fillMaxSize 5 | import androidx.compose.runtime.* 6 | import androidx.compose.ui.DragData 7 | import androidx.compose.ui.ExperimentalComposeUiApi 8 | import androidx.compose.ui.Modifier 9 | import androidx.compose.ui.onExternalDrag 10 | 11 | @OptIn(ExperimentalComposeUiApi::class) 12 | @Composable 13 | fun onExternalDrag( 14 | modifier: Modifier = Modifier, onFileDrop: (List) -> Unit 15 | ) { 16 | Box(modifier = modifier.fillMaxSize().onExternalDrag(onDrop = { 17 | if (it.dragData is DragData.FilesList) { 18 | onFileDrop.invoke((it.dragData as DragData.FilesList).readFiles().map { file -> 19 | file.replace("file:/", "") 20 | }) 21 | } 22 | })) 23 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/utils/OnApplicationExit.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.utils 2 | 3 | 4 | object OnApplicationExit { 5 | 6 | fun exit(callback: (() -> Unit)? = null) { 7 | callback?.invoke() 8 | } 9 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/utils/StringEx.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.utils 2 | 3 | import com.wpf.util.common.ui.base.AbiType 4 | import com.wpf.util.common.ui.marketplace.markets.base.MarketType 5 | import com.wpf.utils.isWinRuntime 6 | import java.io.File 7 | 8 | fun String.marketType(): MarketType { 9 | return MarketType.entries.find { market -> 10 | this.contains(market.channelName, ignoreCase = true) 11 | } ?: MarketType.未知 12 | } 13 | fun String.channelName(): String? { 14 | return MarketType.entries.find { market -> 15 | this.contains(market.channelName, ignoreCase = true) 16 | }?.channelName 17 | } 18 | 19 | fun String.abiType(): AbiType { 20 | return AbiType.entries.find { abi -> 21 | this.contains(abi.type) 22 | } ?: AbiType.Abi32_64 23 | } 24 | 25 | fun String?.asFile() = if (this == null) null else File(this) 26 | 27 | fun String.checkWinPath(): String { 28 | if (isWinRuntime) { 29 | return replace("/", "\\\\").replace("%20", " ") 30 | } 31 | return this 32 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/widget/AddItemDialog.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.widget 2 | 3 | import androidx.compose.desktop.ui.tooling.preview.Preview 4 | import androidx.compose.foundation.layout.Column 5 | import androidx.compose.material.* 6 | import androidx.compose.runtime.* 7 | import androidx.compose.ui.text.TextRange 8 | import androidx.compose.ui.text.input.TextFieldValue 9 | 10 | 11 | @Preview 12 | @Composable 13 | fun AddItemDialog(showDialog: MutableState = mutableStateOf(false), inputStr: String = "", callback: (String) -> Unit) { 14 | val showDialogR = remember { showDialog } 15 | val groupDialogInput = remember { mutableStateOf(inputStr) } 16 | 17 | if (showDialogR.value) { 18 | AlertDialog(onDismissRequest = { 19 | showDialogR.value = false 20 | }, dismissButton = { 21 | TextButton(onClick = { 22 | showDialogR.value = false 23 | }) { 24 | Text(text = "取消") 25 | } 26 | }, confirmButton = { 27 | TextButton(onClick = { 28 | showDialogR.value = false 29 | callback.invoke(groupDialogInput.value) 30 | }) { 31 | Text(text = "确认") 32 | } 33 | }, title = { 34 | Text(if (inputStr.isEmpty()) "添加" else "修改") 35 | }, text = { 36 | Column { 37 | Text("") 38 | OutlinedTextField( 39 | value = TextFieldValue(groupDialogInput.value, TextRange(groupDialogInput.value.length)), 40 | onValueChange = { 41 | groupDialogInput.value = it.text 42 | }, 43 | placeholder = { 44 | Text("请输入") 45 | }, 46 | singleLine = true, 47 | ) 48 | } 49 | }) 50 | } 51 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/widget/common/AddImage.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.widget.common 2 | 3 | import androidx.compose.desktop.ui.tooling.preview.Preview 4 | import androidx.compose.foundation.Image 5 | import androidx.compose.foundation.clickable 6 | import androidx.compose.foundation.layout.Box 7 | import androidx.compose.foundation.layout.fillMaxSize 8 | import androidx.compose.foundation.layout.size 9 | import androidx.compose.material.Icon 10 | import androidx.compose.material.icons.Icons 11 | import androidx.compose.material.icons.filled.Add 12 | import androidx.compose.runtime.Composable 13 | import androidx.compose.runtime.mutableStateOf 14 | import androidx.compose.runtime.remember 15 | import androidx.compose.ui.Modifier 16 | import androidx.compose.ui.graphics.painter.BitmapPainter 17 | import androidx.compose.ui.res.loadImageBitmap 18 | import androidx.compose.ui.unit.DpSize 19 | import androidx.compose.ui.unit.dp 20 | import com.wpf.util.common.ui.utils.FileSelector 21 | import java.io.File 22 | 23 | @Preview 24 | @Composable 25 | fun AddImage(imagePath: String, size: DpSize = DpSize(56.dp, 56.dp), callback: (String) -> Unit) { 26 | val image = remember { mutableStateOf(imagePath) } 27 | Box( 28 | modifier = Modifier.size(size) 29 | ) { 30 | if (image.value.isNotEmpty()) { 31 | Image(painter = BitmapPainter(loadImageBitmap(File(image.value).inputStream())), 32 | "", 33 | modifier = Modifier.fillMaxSize().clickable { 34 | image.value = "" 35 | callback.invoke("") 36 | }) 37 | } else { 38 | Icon(Icons.Default.Add, "添加", modifier = Modifier.fillMaxSize().clickable { 39 | FileSelector.showFileSelector(arrayOf("jpg", "png")) { 40 | image.value = it 41 | callback.invoke(it) 42 | } 43 | }) 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/widget/common/BigTitle.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.widget.common 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.layout.Box 5 | import androidx.compose.foundation.layout.fillMaxWidth 6 | import androidx.compose.foundation.layout.height 7 | import androidx.compose.foundation.layout.padding 8 | import androidx.compose.foundation.shape.RoundedCornerShape 9 | import androidx.compose.material.Text 10 | import androidx.compose.runtime.Composable 11 | import androidx.compose.ui.Alignment 12 | import androidx.compose.ui.Modifier 13 | import androidx.compose.ui.draw.clip 14 | import androidx.compose.ui.text.font.FontWeight 15 | import androidx.compose.ui.unit.dp 16 | import com.wpf.util.common.ui.centerBgColor 17 | import com.wpf.util.common.ui.mainTextColor 18 | 19 | @Composable 20 | fun BigTitle(title: String) { 21 | Box( 22 | modifier = Modifier.fillMaxWidth().height(100.dp).padding(all = 16.dp) 23 | .clip(shape = RoundedCornerShape(8.dp)).background(color = centerBgColor), 24 | contentAlignment = Alignment.Center 25 | ) { 26 | Text(title, fontWeight = FontWeight.Bold, color = mainTextColor) 27 | } 28 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/widget/common/ItemTextView.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.widget.common 2 | 3 | import androidx.compose.desktop.ui.tooling.preview.Preview 4 | import androidx.compose.foundation.background 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.shape.RoundedCornerShape 7 | import androidx.compose.material.Text 8 | import androidx.compose.runtime.Composable 9 | import androidx.compose.runtime.MutableState 10 | import androidx.compose.runtime.mutableStateOf 11 | import androidx.compose.runtime.remember 12 | import androidx.compose.ui.Alignment 13 | import androidx.compose.ui.Modifier 14 | import androidx.compose.ui.draw.clip 15 | import androidx.compose.ui.graphics.Color 16 | import androidx.compose.ui.unit.dp 17 | import androidx.compose.ui.unit.sp 18 | import com.wpf.util.common.ui.mainTextColor 19 | 20 | @Preview 21 | @Composable 22 | fun ItemTextView( 23 | text: String, 24 | isSelectState: MutableState = mutableStateOf(false), 25 | modifier: Modifier = Modifier, 26 | content: (@Composable BoxScope.() -> Unit)? = null 27 | ) { 28 | val isSelect = remember { isSelectState } 29 | Box( 30 | modifier = Modifier.fillMaxWidth().height(44.dp).padding(start = 8.dp, top = 4.dp, end = 8.dp, bottom = 4.dp).clip(shape = RoundedCornerShape(8.dp)) 31 | .background(color = if (isSelect.value) mainTextColor else Color.White) 32 | .then(modifier), contentAlignment = Alignment.CenterStart, content = content ?: { 33 | Text( 34 | text = text, 35 | modifier = Modifier.padding(start = 8.dp, end = 8.dp), 36 | color = if (isSelect.value) Color.White else Color.Black, 37 | fontSize = 14.sp 38 | ) 39 | } 40 | ) 41 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/widget/common/ItemView.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.widget.common 2 | 3 | import androidx.compose.desktop.ui.tooling.preview.Preview 4 | import androidx.compose.foundation.background 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.shape.RoundedCornerShape 7 | import androidx.compose.runtime.Composable 8 | import androidx.compose.ui.Alignment 9 | import androidx.compose.ui.Modifier 10 | import androidx.compose.ui.draw.clip 11 | import androidx.compose.ui.graphics.Color 12 | import androidx.compose.ui.unit.dp 13 | import com.wpf.util.common.ui.mainTextColor 14 | 15 | @Preview 16 | @Composable 17 | fun ItemView( 18 | isSelectState: Boolean = false, modifier: Modifier = Modifier, content: @Composable BoxScope.() -> Unit 19 | ) { 20 | Box( 21 | modifier = Modifier.fillMaxWidth().clip(shape = RoundedCornerShape(8.dp)) 22 | .background(color = if (isSelectState) mainTextColor else Color.White) 23 | .then(modifier), contentAlignment = Alignment.CenterStart, content = content 24 | ) 25 | } -------------------------------------------------------------------------------- /common/src/commonMain/kotlin/com/wpf/util/common/ui/widget/common/ShapeText.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.util.common.ui.widget.common 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.layout.Box 5 | import androidx.compose.foundation.layout.padding 6 | import androidx.compose.foundation.shape.RoundedCornerShape 7 | import androidx.compose.material.Text 8 | import androidx.compose.runtime.Composable 9 | import androidx.compose.ui.Alignment 10 | import androidx.compose.ui.Modifier 11 | import androidx.compose.ui.draw.clip 12 | import androidx.compose.ui.graphics.Color 13 | import androidx.compose.ui.unit.Dp 14 | import androidx.compose.ui.unit.TextUnit 15 | import androidx.compose.ui.unit.dp 16 | 17 | @Composable 18 | fun ShapeText( 19 | title: String, 20 | fontColor: Color = Color.White, 21 | fontSize: TextUnit = TextUnit.Unspecified, 22 | bgColor: Color = Color.Unspecified, 23 | shapeRounded: Dp = 4.dp 24 | ) { 25 | Text( 26 | title, 27 | color = fontColor, 28 | fontSize = fontSize, 29 | modifier = Modifier.clip(shape = RoundedCornerShape(shapeRounded)).background(color = bgColor) 30 | .padding(3.dp, 1.dp, 3.dp, 1.dp) 31 | ) 32 | } -------------------------------------------------------------------------------- /common/src/commonMain/resources/application.conf: -------------------------------------------------------------------------------- 1 | ktor { 2 | deployment { 3 | port = 9587 4 | } 5 | application { 6 | modules = [com.wpf.util.common.service.FileServiceKt.module] 7 | } 8 | } -------------------------------------------------------------------------------- /common/src/commonMain/resources/image/api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/common/src/commonMain/resources/image/api.png -------------------------------------------------------------------------------- /common/src/commonMain/resources/image/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/common/src/commonMain/resources/image/icon.png -------------------------------------------------------------------------------- /common/src/commonMain/resources/image/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/common/src/commonMain/resources/image/upload.png -------------------------------------------------------------------------------- /dealJiagu/src/main/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.wpf.utils.jiagu.MainKt 3 | 4 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/AES128Helper.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils 2 | 3 | import com.wpf.utils.jiagu.utils.AES128Helper.getRandom 4 | import javax.crypto.Cipher 5 | import javax.crypto.SecretKey 6 | import javax.crypto.spec.IvParameterSpec 7 | import javax.crypto.spec.SecretKeySpec 8 | import kotlin.math.floor 9 | 10 | object AES128Helper { 11 | var DEFAULT_SECRET_KEY = "183ehypp8zaokmvf" 12 | var KEY_VI = "7dtu4vzwdwosceej" 13 | 14 | private fun getEncryptCipher(model: Int): Cipher { 15 | val key: SecretKey = SecretKeySpec(DEFAULT_SECRET_KEY.toByteArray(), "AES") 16 | val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") 17 | cipher.init(model, key, IvParameterSpec(KEY_VI.toByteArray())) 18 | return cipher 19 | } 20 | 21 | fun encrypt(data: ByteArray, len: Int): ByteArray { 22 | val cipher = getEncryptCipher(Cipher.ENCRYPT_MODE) 23 | val decrypt = cipher.doFinal(data.copyOf(len)) 24 | 25 | val temp = ByteArray(decrypt.size + data.size - len) 26 | System.arraycopy(decrypt, 0, temp, 0, decrypt.size) 27 | System.arraycopy(data, len, temp, decrypt.size, data.size - len) 28 | return temp 29 | } 30 | 31 | fun getRandom(length: Int): String { 32 | val arr = charArrayOf( 33 | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 34 | 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 35 | ) 36 | var result = arr[floor(Math.random() * 36).toInt()].toString() 37 | for (i in 1 until length) { 38 | result += arr[floor(Math.random() * 36).toInt()] 39 | } 40 | return result 41 | } 42 | } 43 | 44 | fun main() { 45 | println(getRandom(16)) 46 | println(getRandom(16)) 47 | } -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/ApplicationHelper.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils 2 | 3 | import com.wpf.utils.ex.FileUtil 4 | import com.wpf.utils.ex.createCheck 5 | import com.wpf.utils.tools.ManifestEditorUtil 6 | import net.dongliu.apk.parser.ApkParsers 7 | import java.io.File 8 | import java.io.InputStream 9 | 10 | object ApplicationHelper { 11 | 12 | fun getPackageName(srcApkFile: File): String? { 13 | val srcManifestFileStr = ApkParsers.getManifestXml(srcApkFile) 14 | val applicationStr = "(?<=)".toRegex().find(srcManifestFileStr)!!.value 15 | return "(?<=package=\")(.*?)(?=\")".toRegex().find(applicationStr)?.value 16 | } 17 | 18 | /** 19 | * 带包名 20 | */ 21 | fun getName(srcApkFile: File): String? { 22 | val srcManifestFileStr = ApkParsers.getManifestXml(srcApkFile) 23 | val applicationStr = "(?<=)".toRegex().find(srcManifestFileStr)!!.value 24 | return "(?<=android:name=\")(.*?)(?=\")".toRegex().find(applicationStr)?.value 25 | } 26 | 27 | fun setNewName(curPath: String, androidManifestIS: InputStream, newName: String): File { 28 | val androidManifest = "AndroidManifest.xml" 29 | val srcManifestFile = File(curPath + File.separator + "AndroidManifest_src.xml").createCheck(true) 30 | FileUtil.save2File(androidManifestIS, srcManifestFile) 31 | androidManifestIS.close() 32 | val fixManifestFile = File(curPath + File.separator + androidManifest).createCheck(true) 33 | ManifestEditorUtil.doCommand( 34 | mutableListOf( 35 | srcManifestFile.path, 36 | "-f", 37 | "-o", 38 | fixManifestFile.path, 39 | "-an", 40 | newName 41 | ) 42 | ) 43 | srcManifestFile.delete() 44 | return fixManifestFile 45 | } 46 | } -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/EncryptUtils.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils 2 | 3 | object EncryptUtils { 4 | /** 5 | * dex头(也就是前112位进行异或) 6 | */ 7 | fun encryptXor(data: ByteArray, len: Int = 112): ByteArray { 8 | for (i in 0 until len) { 9 | data[i] = (data[i].toInt() xor 0x66).toByte() 10 | } 11 | 12 | return data 13 | } 14 | 15 | /** 16 | * int转byte[] 17 | */ 18 | fun intToByteArray(number: Int): ByteArray { 19 | var numberTemp = number 20 | val b = ByteArray(4) 21 | for (i in 3 downTo 0) { 22 | b[i] = (numberTemp and 0xFF).toByte() 23 | numberTemp = numberTemp shr 8 24 | } 25 | return b 26 | } 27 | } -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/TimeFormat.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils 2 | 3 | fun Long.formatTime(): String { 4 | val minute = (this / 1000) / 60 5 | val second = (this / 1000) % 60 6 | val millis = this % 1000 7 | return if (minute > 0) { 8 | "%02d分%02d秒%02d毫秒".format(minute, second, millis) 9 | } else if (second > 0) { 10 | "%02d秒%02d毫秒".format(second, millis) 11 | } else "%02d毫秒".format(millis) 12 | } -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/AnnotationsDirectoryItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class AnnotationsDirectoryItem { 4 | /** 5 | * u4 classAnnotationsOff; 6 | * u4 fieldsSize; 7 | * u4 methodsSize; 8 | * u4 parametersSize; 9 | */ 10 | var classAnnotationsOff: Int = 0 11 | var fieldsSize: Int = 0 12 | var methodsSize: Int = 0 13 | var parametersSize: Int = 0 14 | } 15 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/CodeItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | import com.wpf.utils.jiagu.utils.parsedex.Utils 4 | 5 | class CodeItem(classIdx: String? = null) { 6 | /** 7 | * struct code_item 8 | * { 9 | * ushort registers_size; 10 | * ushort ins_size; 11 | * ushort outs_size; 12 | * ushort tries_size; 13 | * uint debug_info_off; 14 | * uint insns_size; 15 | * ushort insns [ insns_size ]; 16 | * ushort paddding; // optional 17 | * try_item tries [ tyies_size ]; // optional 18 | * encoded_catch_handler_list handlers; // optional 19 | * } 20 | */ 21 | var registers_size: Short = 0 22 | var ins_size: Short = 0 23 | var outs_size: Short = 0 24 | var tries_size: Short = 0 25 | var debug_info_off: Int = 0 26 | var insns_size: Int = 0 27 | var insns: ShortArray = shortArrayOf() 28 | 29 | //指令偏移 30 | var insnsOffset: Int = 0 31 | 32 | override fun toString(): String { 33 | return """ 34 | regsize:$registers_size,ins_size:$ins_size,outs_size:$outs_size,tries_size:$tries_size,debug_info_off:$debug_info_off,insns_size:$insns_size 35 | insns:${insnsStr} 36 | """.trimIndent() 37 | } 38 | 39 | private val insnsStr: String 40 | get() { 41 | val sb = StringBuilder() 42 | for (i in insns.indices) { 43 | sb.append(Utils.bytesToHexString(Utils.short2Byte(insns[i])) + ",") 44 | } 45 | return sb.toString() 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/EncodedField.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | import com.wpf.utils.jiagu.utils.parsedex.Utils 4 | 5 | class EncodedField { 6 | /** 7 | * struct encoded_field 8 | * { 9 | * uleb128 filed_idx_diff; // index into filed_ids for ID of this filed 10 | * uleb128 access_flags; // access flags like public, static etc. 11 | * } 12 | */ 13 | var filed_idx_diff: ByteArray = ByteArray(0) 14 | var access_flags: ByteArray = ByteArray(0) 15 | 16 | override fun toString(): String { 17 | return ("field_idx_diff:" + Utils.bytesToHexString(filed_idx_diff)).toString() + ",access_flags:" + Utils.bytesToHexString( 18 | filed_idx_diff 19 | ) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/EncodedMethod.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | import com.wpf.utils.jiagu.utils.parsedex.Utils 4 | 5 | class EncodedMethod(val classIdx: String? = null) { 6 | /** 7 | * struct encoded_method 8 | * { 9 | * uleb128 method_idx_diff; 10 | * uleb128 access_flags; 11 | * uleb128 code_off; 12 | * } 13 | */ 14 | var method_idx_diff: ByteArray = ByteArray(0) 15 | var access_flags: ByteArray = ByteArray(0) 16 | var code_off: ByteArray = ByteArray(0) 17 | 18 | override fun toString(): String { 19 | return ((((("method_idx_diff:" + Utils.bytesToHexString(method_idx_diff)).toString() + "," + Utils.bytesToHexString( 20 | Utils.int2Byte(Utils.decodeULeb128(method_idx_diff)) 21 | ) 22 | ).toString() + ",access_flags:" + Utils.bytesToHexString(access_flags)).toString() + "," + Utils.bytesToHexString( 23 | Utils.int2Byte(Utils.decodeULeb128(access_flags)) 24 | ) 25 | ).toString() + ",code_off:" + Utils.bytesToHexString(code_off)).toString() + "," + Utils.bytesToHexString( 26 | Utils.int2Byte(Utils.decodeULeb128(code_off)) 27 | ) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/FieldIdsItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class FieldIdsItem { 4 | /** 5 | * struct filed_id_item 6 | * { 7 | * ushort class_idx; 8 | * ushort type_idx; 9 | * uint name_idx; 10 | * } 11 | */ 12 | var class_idx: Short = 0 13 | var type_idx: Short = 0 14 | var name_idx: Int = 0 15 | 16 | override fun toString(): String { 17 | return "class_idx:$class_idx,type_idx:$type_idx,name_idx:$name_idx" 18 | } 19 | 20 | companion object { 21 | fun getSize() = 2 + 2 + 4 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/MapItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class MapItem { 4 | /** 5 | * struct map_item 6 | * { 7 | * ushort type; 8 | * ushort unuse; 9 | * uint size; 10 | * uint offset; 11 | * } 12 | */ 13 | var type: Short = 0 14 | var unuse: Short = 0 15 | var size: Int = 0 16 | var offset: Int = 0 17 | 18 | override fun toString(): String { 19 | return "type:$type,unuse:$unuse,size:$size,offset:$offset" 20 | } 21 | 22 | companion object { 23 | fun getSize(): Int { 24 | return 2 + 2 + 4 + 4 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/MapList.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class MapList { 4 | /** 5 | * struct maplist 6 | * { 7 | * uint size; 8 | * map_item list [size]; 9 | * } 10 | */ 11 | var size: Int = 0 12 | var map_item: ArrayList = ArrayList() 13 | } 14 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/MethodIdsItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class MethodIdsItem { 4 | /** 5 | * struct filed_id_item 6 | * { 7 | * ushort class_idx; 8 | * ushort proto_idx; 9 | * uint name_idx; 10 | * } 11 | */ 12 | var class_idx: Short = 0 13 | var proto_idx: Short = 0 14 | var name_idx: Int = 0 15 | 16 | override fun toString(): String { 17 | return "class_idx:$class_idx,proto_idx:$proto_idx,name_idx:$name_idx" 18 | } 19 | 20 | companion object { 21 | fun getSize() = 2 + 2 + 4 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/ProtoIdsItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class ProtoIdsItem { 4 | /** 5 | * struct proto_id_item 6 | * { 7 | * uint shorty_idx; 8 | * uint return_type_idx; 9 | * uint parameters_off; 10 | * } 11 | */ 12 | var shorty_idx: Int = 0 13 | var return_type_idx: Int = 0 14 | var parameters_off: Int = 0 15 | 16 | //������ǹ����ֶΣ�����Ϊ�˴洢����ԭ���еIJ����������Ͳ������� 17 | var parametersList: List = ArrayList() 18 | var parameterCount: Int = 0 19 | 20 | override fun toString(): String { 21 | return "shorty_idx:$shorty_idx,return_type_idx:$return_type_idx,parameters_off:$parameters_off" 22 | } 23 | 24 | companion object { 25 | fun getSize() = 4 + 4 + 4 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/StringDataItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class StringDataItem { 4 | /** 5 | * struct string_data_item 6 | * { 7 | * uleb128 utf16_size; 8 | * ubyte data; 9 | * } 10 | */ 11 | /** 12 | * �����������ᵽ�� LEB128 �� little endian base 128 ) ��ʽ ���ǻ��� 1 �� Byte ��һ�ֲ������ȵ� 13 | * ���뷽ʽ ������һ�� Byte �����λΪ 1 �����ʾ����Ҫ��һ�� Byte ������ ��ֱ�����һ�� Byte ����� 14 | * λΪ 0 ��ÿ�� Byte ������ Bit ������ʾ���� 15 | */ 16 | var utf16_size: List = ArrayList() 17 | var data: Byte = 0 18 | } 19 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/StringIdsItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | import com.wpf.utils.jiagu.utils.parsedex.Utils 4 | 5 | class StringIdsItem { 6 | /** 7 | * struct string_ids_item 8 | * { 9 | * uint string_data_off; 10 | * } 11 | */ 12 | var string_data_off: Int = 0 13 | 14 | override fun toString(): String { 15 | return Utils.bytesToHexString(Utils.int2Byte(string_data_off)) ?: "" 16 | } 17 | 18 | companion object { 19 | fun getSize() = 4 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/TypeIdsItem.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | import com.wpf.utils.jiagu.utils.parsedex.Utils 4 | 5 | class TypeIdsItem { 6 | /** 7 | * struct type_ids_item 8 | * { 9 | * uint descriptor_idx; 10 | * } 11 | */ 12 | var descriptor_idx: Int = 0 13 | 14 | override fun toString(): String { 15 | return Utils.bytesToHexString(Utils.int2Byte(descriptor_idx)) ?: "" 16 | } 17 | 18 | companion object { 19 | fun getSize() = 4 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /dealJiagu/src/main/java/com/wpf/utils/jiagu/utils/parsedex/struct/TypeList.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils.jiagu.utils.parsedex.struct 2 | 3 | class TypeList { 4 | /** 5 | * struct type_list 6 | * { 7 | * uint size; 8 | * ushort type_idx[size]; 9 | * } 10 | */ 11 | var size: Int = 0 //�����ĸ��� 12 | var type_idx: List = ArrayList() //���������� 13 | } 14 | -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/ManifestEditor.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/ManifestEditor.jar -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/apksigner.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/apksigner.jar -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/dx.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/dx.zip -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/jiaguLibrary.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/jiaguLibrary.zip -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/zipalign/zipalign.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/zipalign/zipalign.exe -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/zipalign/zipalign_linux.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/zipalign/zipalign_linux.zip -------------------------------------------------------------------------------- /dealJiagu/src/main/resources/zipalign/zipalign_mac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/dealJiagu/src/main/resources/zipalign/zipalign_mac -------------------------------------------------------------------------------- /desktop/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.jetbrains.compose.desktop.application.dsl.TargetFormat 2 | 3 | plugins { 4 | kotlin("multiplatform") 5 | id("org.jetbrains.compose") 6 | } 7 | 8 | group = "com.wpf.compose.desktop" 9 | version = "1.0-SNAPSHOT" 10 | 11 | 12 | kotlin { 13 | jvm { 14 | jvmToolchain(17) 15 | withJava() 16 | } 17 | sourceSets { 18 | val jvmMain by getting { 19 | dependencies { 20 | api(project(":common")) 21 | api(compose.desktop.currentOs) 22 | api("org.jetbrains.skiko:skiko-awt-runtime-windows-x64:0.7.85.4") 23 | } 24 | } 25 | } 26 | } 27 | 28 | compose.desktop { 29 | application { 30 | mainClass = "MainKt" 31 | buildTypes.release.proguard { 32 | configurationFiles.from("rules.pro") 33 | } 34 | nativeDistributions { 35 | //配置需要的模块 36 | modules( 37 | "java.compiler", 38 | "java.instrument", 39 | "java.management", 40 | "java.naming", 41 | "java.net.http", 42 | "java.prefs", 43 | "java.security.jgss", 44 | "java.sql", 45 | "jdk.jfr", 46 | "jdk.jsobject", 47 | "jdk.unsupported", 48 | "jdk.unsupported.desktop", 49 | "jdk.xml.dom" 50 | ) 51 | targetFormats(TargetFormat.Exe, TargetFormat.Dmg) 52 | packageName = "ChannelAndSign" 53 | packageVersion = "1.0.0" 54 | description = "by wpf" 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /desktop/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/desktop/icon.png -------------------------------------------------------------------------------- /desktop/rules.pro: -------------------------------------------------------------------------------- 1 | -dontwarn net.dongliu.** 2 | -dontwarn net.bytebuddy.** 3 | -dontwarn ch.qos.logback.** 4 | -dontwarn io.netty.** 5 | -dontwarn io.ktor.client.** 6 | -dontwarn io.ktor.** 7 | -dontwarn io.opentelemetry.** 8 | -dontwarn com.wpf.util.common.ui.** 9 | -dontwarn com.alibaba.fastjson.** 10 | -dontwarn com.google.common.** 11 | -dontwarn com.taobao.sophix.** 12 | -dontwarn org.apache.commons.** 13 | -dontwarn org.bouncycastle.** 14 | -dontwarn org.openqa.selenium.** 15 | -dontwarn org.slf4j.** 16 | 17 | -keep class org.bouncycastle.** { *; } 18 | -keep class kotlinx.coroutines.** { *; } 19 | -keep class com.wpf.util.common.ui.marketplace.markets.VivoBaseResponse { *; } 20 | -keep class com.wpf.util.common.ui.marketplace.markets.VivoUploadFileResponse { *; } -------------------------------------------------------------------------------- /desktop/src/jvmMain/kotlin/Main.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.ui.Alignment 2 | import androidx.compose.ui.unit.dp 3 | import androidx.compose.ui.window.Window 4 | import androidx.compose.ui.window.WindowPosition 5 | import androidx.compose.ui.window.application 6 | import androidx.compose.ui.window.rememberWindowState 7 | import com.wpf.util.common.MainView 8 | 9 | // 主函数,应用程序的入口 10 | fun main() = application { 11 | // 创建一个窗口 12 | Window( 13 | transparent = true, // 窗口透明 14 | undecorated = true, // 窗口无边框 15 | resizable = true, // 窗口可调整大小 16 | state = rememberWindowState( 17 | // 记住窗口状态 18 | position = WindowPosition( // 设置窗口位置 19 | Alignment.Center // 窗口居中 20 | ), 21 | width = 1080.dp, // 窗口宽度为1080dp 22 | height = 720.dp, // 窗口高度为720dp 23 | ), 24 | title = "打渠道包并签名", // 窗口标题 25 | onCloseRequest = ::exitApplication // 关闭请求时退出应用程序 26 | ) { 27 | // 在窗口中显示主视图 28 | MainView(this, this@application) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fileReplace/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build/ 3 | !gradle/wrapper/gradle-wrapper.jar 4 | !**/src/main/**/build/ 5 | !**/src/test/**/build/ 6 | 7 | ### IntelliJ IDEA ### 8 | .idea/modules.xml 9 | .idea/jarRepositories.xml 10 | .idea/compiler.xml 11 | .idea/libraries/ 12 | *.iws 13 | *.iml 14 | *.ipr 15 | out/ 16 | !**/src/main/**/out/ 17 | !**/src/test/**/out/ 18 | 19 | ### Eclipse ### 20 | .apt_generated 21 | .classpath 22 | .factorypath 23 | .project 24 | .settings 25 | .springBeans 26 | .sts4-cache 27 | bin/ 28 | !**/src/main/**/bin/ 29 | !**/src/test/**/bin/ 30 | 31 | ### NetBeans ### 32 | /nbproject/private/ 33 | /nbbuild/ 34 | /dist/ 35 | /nbdist/ 36 | /.nb-gradle/ 37 | 38 | ### VS Code ### 39 | .vscode/ 40 | 41 | ### Mac OS ### 42 | .DS_Store -------------------------------------------------------------------------------- /fileReplace/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kotlin") 3 | } 4 | 5 | group = "pers.wpf.kotlin.utils.fileReplace" 6 | version = "1.0-SNAPSHOT" 7 | 8 | repositories { 9 | mavenCentral() 10 | } 11 | 12 | dependencies { 13 | implementation(kotlin("stdlib-jdk8")) 14 | } 15 | 16 | java { 17 | sourceCompatibility = JavaVersion.VERSION_1_8 18 | targetCompatibility = JavaVersion.VERSION_1_8 19 | } 20 | kotlin { 21 | jvmToolchain(8) 22 | } 23 | 24 | tasks.register("FileReplace打包", Jar::class) { 25 | group = "jar" 26 | archiveFileName = "FileReplace.jar" 27 | destinationDirectory.set(file("D:\\Android\\ShareFile\\tools")) 28 | manifest { 29 | attributes["Main-Class"] = "com.wpf.utils.MainKt" 30 | attributes["Manifest-Version"] = "1.0.1" 31 | } 32 | from( 33 | sourceSets.main.get().output, 34 | configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) } 35 | ) 36 | exclude( 37 | "META-INF/*.RSA", 38 | "META-INF/*.SF", 39 | "META-INF/*.DSA", 40 | "META-INF/LICENSE.txt", 41 | "META-INF/versions/9/module-info.class", 42 | "module-info.class", 43 | "META-INF/INDEX.LIST" 44 | ) 45 | } -------------------------------------------------------------------------------- /fileReplace/src/main/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.wpf.utils.MainKt 3 | 4 | -------------------------------------------------------------------------------- /fileReplace/src/main/java/com/wpf/utils/FileReplace.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils 2 | 3 | import java.io.File 4 | 5 | object FileReplace { 6 | 7 | fun findAndReplace(filePath: String, findStart: String = "", findEnd: String = "", regex: String, replace: String) { 8 | if (filePath.isEmpty()) { 9 | println("文件路径参数异常") 10 | return 11 | } 12 | val changeFile = File(filePath) 13 | val fileStr = changeFile.readBytes().decodeToString() 14 | if (fileStr.isEmpty()) return 15 | val newFileStr = if (findStart.isNotEmpty()) { 16 | val findStartPos = fileStr.indexOf(findStart) 17 | val findEndPos = fileStr.indexOf(findEnd) 18 | val oldReplaceStr = fileStr.substring(findStartPos, findEndPos + findEnd.length) 19 | val newReplaceStr = oldReplaceStr.replace(regex.toRegex(), replace) 20 | fileStr.replaceFirst(oldReplaceStr, newReplaceStr) 21 | } else { 22 | fileStr.replace(regex.toRegex(), replace) 23 | } 24 | changeFile.writeText(newFileStr) 25 | } 26 | } -------------------------------------------------------------------------------- /fileReplace/src/main/java/com/wpf/utils/Main.kt: -------------------------------------------------------------------------------- 1 | package com.wpf.utils 2 | 3 | import java.io.File 4 | 5 | fun main(args: Array? = null) { 6 | if (args.isNullOrEmpty()) { 7 | println("参数异常:${args.contentToString()}") 8 | return 9 | } 10 | var filePath = "" 11 | var findStart = "" 12 | var findEnd = "" 13 | var regex = "" 14 | var replace = "" 15 | args.forEachIndexed { index, arg -> 16 | val nextInput = args.getOrNull(index + 1) ?: "" 17 | when(arg) { 18 | "-file" -> { 19 | filePath = nextInput 20 | } 21 | "-findStart" -> { 22 | findStart = nextInput 23 | } 24 | "-findEnd" -> { 25 | findEnd = nextInput 26 | } 27 | "-regex" -> { 28 | regex = nextInput 29 | } 30 | "-replace" -> { 31 | replace = nextInput 32 | } 33 | } 34 | } 35 | if (regex.isNotEmpty() && replace.isNotEmpty()) { 36 | FileReplace.findAndReplace(filePath, findStart, findEnd, regex, replace) 37 | } else { 38 | val changeFile = File(filePath) 39 | val fileStr = changeFile.readBytes().decodeToString() 40 | if (fileStr.isEmpty()) return 41 | val findStartPos = fileStr.indexOf(findStart) 42 | val findEndPos = fileStr.indexOf(findEnd) 43 | val oldReplaceStr = fileStr.substring(findStartPos, findEndPos + findEnd.length) 44 | println(oldReplaceStr) 45 | } 46 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | kotlin.mpp.androidSourceSetLayoutVersion=2 3 | kotlin.mpp.import.enableKgpDependencyResolution=true 4 | kotlin.native.useEmbeddableCompilerJar=true 5 | kotlin.version=1.9.21 6 | compose.version=1.5.11 7 | 8 | android.useAndroidX=true 9 | android.nonTransitiveRClass=true 10 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 11 | org.gradle.daemon=true 12 | org.gradle.parallel=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /jiagulibrary/app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("com.android.application") 3 | } 4 | 5 | android { 6 | namespace = "com.wpf.jiagu.demo" 7 | compileSdk = 33 8 | 9 | defaultConfig { 10 | applicationId = "com.wpf.jiagu" 11 | minSdk = 19 12 | targetSdk = 33 13 | versionCode = 1 14 | versionName = "1.0.0" 15 | 16 | ndk { 17 | this.abiFilters.add("armeabi") 18 | this.abiFilters.add("armeabi-v7a") 19 | this.abiFilters.add("arm64-v8a") 20 | } 21 | } 22 | 23 | signingConfigs { 24 | getByName("debug") { 25 | storeFile = file("../jiagu.jks") 26 | storePassword = "abc12345678" 27 | keyAlias = "jiagu" 28 | keyPassword = "abc12345678" 29 | enableV1Signing = true 30 | enableV2Signing = true 31 | } 32 | create("release") { 33 | storeFile = file("../jiagu.jks") 34 | storePassword = "abc12345678" 35 | keyAlias = "jiagu" 36 | keyPassword = "abc12345678" 37 | enableV1Signing = true 38 | enableV2Signing = true 39 | } 40 | } 41 | 42 | buildTypes { 43 | release { 44 | isMinifyEnabled = false 45 | proguardFiles( 46 | getDefaultProguardFile("proguard-android-optimize.txt"), 47 | "proguard-rules.pro" 48 | ) 49 | signingConfig = signingConfigs.getByName("debug") 50 | } 51 | } 52 | compileOptions { 53 | sourceCompatibility = JavaVersion.VERSION_1_8 54 | targetCompatibility = JavaVersion.VERSION_1_8 55 | } 56 | lint.checkReleaseBuilds = false 57 | lint.abortOnError = false 58 | } 59 | 60 | dependencies { 61 | //修改annotation版本需要同步修改JiaGu.kt替换代码 62 | implementation("androidx.annotation:annotation:1.7.0") 63 | implementation(project(":jiagulibrary")) 64 | } -------------------------------------------------------------------------------- /jiagulibrary/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /jiagulibrary/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /jiagulibrary/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.library' 3 | } 4 | 5 | android { 6 | namespace 'com.wpf.util.jiagulibrary' 7 | compileSdk 33 8 | 9 | defaultConfig { 10 | minSdk 19 11 | 12 | ndk { 13 | abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" 14 | } 15 | } 16 | 17 | buildTypes { 18 | release { 19 | minifyEnabled false 20 | } 21 | } 22 | compileOptions { 23 | sourceCompatibility JavaVersion.VERSION_1_8 24 | targetCompatibility JavaVersion.VERSION_1_8 25 | } 26 | externalNativeBuild { 27 | cmake { 28 | path "src/main/cpp/CMakeLists.txt" 29 | version "3.22.1" 30 | } 31 | } 32 | ndkVersion '26.3.11579264' 33 | } 34 | 35 | dependencies { 36 | } -------------------------------------------------------------------------------- /jiagulibrary/build.gradle.kts: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | mavenLocal() 4 | maven("https://maven.aliyun.com/repository/public") 5 | maven("https://maven.aliyun.com/repository/central") 6 | maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") 7 | maven("https://gitlab.com/api/v4/projects/38224197/packages/maven") 8 | maven("https://packages.aliyun.com/maven/repository/2428546-release-87ayOu") { 9 | credentials { 10 | username = "653b02ee970dc802e532f004" 11 | password = "ZwOcLGu7St6N" 12 | } 13 | } 14 | google() 15 | mavenCentral() 16 | } 17 | } 18 | 19 | plugins { 20 | id("com.android.application") version "7.4.2" apply false 21 | id("com.android.library") version "7.4.2" apply false 22 | } 23 | -------------------------------------------------------------------------------- /jiagulibrary/gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | android.useAndroidX=true 3 | android.nonTransitiveRClass=true 4 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 5 | org.gradle.daemon=true 6 | org.gradle.parallel=true -------------------------------------------------------------------------------- /jiagulibrary/jiagu.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/jiagulibrary/jiagu.jks -------------------------------------------------------------------------------- /jiagulibrary/local.properties: -------------------------------------------------------------------------------- 1 | ## This file must *NOT* be checked into Version Control Systems, 2 | # as it contains information specific to your local configuration. 3 | # 4 | # Location of the SDK. This is only used by Gradle. 5 | # For customization when using a Version Control System, please read the 6 | # header note. 7 | #Mon Dec 04 12:24:53 CST 2023 8 | sdk.dir=D\:\\Android\\ShareFile\\Android\\win\\sdk 9 | -------------------------------------------------------------------------------- /jiagulibrary/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven("https://maven.aliyun.com/repository/public") 4 | maven("https://maven.aliyun.com/repository/central") 5 | maven("https://maven.aliyun.com/repository/gradle-plugin") 6 | google() 7 | gradlePluginPortal() 8 | mavenCentral() 9 | } 10 | 11 | plugins { 12 | id("com.android.application") version "7.4.2" 13 | id("com.android.library") version "7.4.2" 14 | } 15 | } 16 | 17 | //没有安装jdk8需要打开 18 | //plugins { 19 | // id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" 20 | //} 21 | 22 | rootProject.name = "jiaguLibrary" 23 | include(":app") 24 | include(":jiagulibrary") 25 | 26 | -------------------------------------------------------------------------------- /jiagulibrary/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # For more information about using CMake with Android Studio, read the 2 | # documentation: https://d.android.com/studio/projects/add-native-code.html 3 | 4 | # Sets the minimum version of CMake required to build the native library. 5 | 6 | cmake_minimum_required(VERSION 3.10.2) 7 | 8 | project("jiagu") 9 | 10 | add_library( 11 | jiagu 12 | SHARED 13 | jiagu.cpp 14 | utils/And64InlineHook.cpp 15 | utils/memload.cpp 16 | utils/aes.c 17 | utils/dlopen.c 18 | utils/invoke_java.cpp 19 | ) 20 | 21 | include_directories( 22 | utils 23 | ) 24 | 25 | target_link_libraries( 26 | jiagu 27 | log) -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/utils/And64InlineHook.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @date : 2018/04/18 3 | * @author : Rprop (r_prop@outlook.com) 4 | * https://github.com/Rprop/And64InlineHook 5 | */ 6 | /* 7 | MIT License 8 | 9 | Copyright (c) 2018 Rprop (r_prop@outlook.com) 10 | 11 | Permission is hereby granted, free of charge, to any person obtaining a copy 12 | of this software and associated documentation files (the "Software"), to deal 13 | in the Software without restriction, including without limitation the rights 14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | copies of the Software, and to permit persons to whom the Software is 16 | furnished to do so, subject to the following conditions: 17 | 18 | The above copyright notice and this permission notice shall be included in all 19 | copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 | SOFTWARE. 28 | */ 29 | #pragma once 30 | #define A64_MAX_BACKUPS 256 31 | 32 | #ifdef __cplusplus 33 | extern "C" { 34 | #endif 35 | 36 | void A64HookFunction(void *const symbol, void *const replace, void **result); 37 | void *A64HookFunctionV(void *const symbol, void *const replace, 38 | void *const rwx, const uintptr_t rwx_size); 39 | 40 | #ifdef __cplusplus 41 | } 42 | #endif -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/utils/dex_header.h: -------------------------------------------------------------------------------- 1 | #ifndef _DEXHEADER_H 2 | #define _DEXHEADER_H 3 | 4 | #include 5 | 6 | static const size_t kSha1DigestSize = 20; 7 | 8 | // Raw header_item. 9 | struct Header 10 | { 11 | uint8_t magic_[8]; 12 | uint32_t checksum_; // See also location_checksum_ 13 | uint8_t signature_[kSha1DigestSize]; 14 | uint32_t file_size_; // size of entire file 15 | uint32_t header_size_; // offset to start of next section 16 | uint32_t endian_tag_; 17 | uint32_t link_size_; // unused 18 | uint32_t link_off_; // unused 19 | uint32_t map_off_; // unused 20 | uint32_t string_ids_size_; // number of StringIds 21 | uint32_t string_ids_off_; // file offset of StringIds array 22 | uint32_t type_ids_size_; // number of TypeIds, we don't support more than 65535 23 | uint32_t type_ids_off_; // file offset of TypeIds array 24 | uint32_t proto_ids_size_; // number of ProtoIds, we don't support more than 65535 25 | uint32_t proto_ids_off_; // file offset of ProtoIds array 26 | uint32_t field_ids_size_; // number of FieldIds 27 | uint32_t field_ids_off_; // file offset of FieldIds array 28 | uint32_t method_ids_size_; // number of MethodIds 29 | uint32_t method_ids_off_; // file offset of MethodIds array 30 | uint32_t class_defs_size_; // number of ClassDefs 31 | uint32_t class_defs_off_; // file offset of ClassDef array 32 | uint32_t data_size_; // unused 33 | uint32_t data_off_; // unused 34 | }; 35 | 36 | #endif // ifndef _DEXHEADER_H 37 | -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/utils/dlopen.h: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * @author : rrrfff@foxmail.com 4 | * https://github.com/rrrfff/ndk_dlopen 5 | * 6 | */ 7 | #pragma once 8 | #include 9 | #include 10 | 11 | #ifdef __cplusplus 12 | extern "C" { 13 | #endif 14 | 15 | void ndk_init(JNIEnv *env); 16 | void *ndk_dlopen(const char *filename, int flag); 17 | int ndk_dlclose(void *handle); 18 | const char *ndk_dlerror(void); 19 | void *ndk_dlsym(void *handle, const char *symbol); 20 | int ndk_dladdr(const void *ddr, Dl_info *info); 21 | 22 | #ifdef __cplusplus 23 | } 24 | #endif -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/utils/invoke_java.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by zhouming on 2021/9/13. 3 | // 4 | 5 | #ifndef JIAGU_INVOKE_JAVA_H 6 | #define JIAGU_INVOKE_JAVA_H 7 | 8 | #include 9 | void SetEnv(JNIEnv *env); 10 | jobject NewClassInstance(char *className, char *paramCode, ...); 11 | jvalue CallObjectMethod(jobject cls, char *methodName, char *paramCode, ...); 12 | jvalue CallStaticMethod(char *className, char *methodName, char *paramCode, ...); 13 | jvalue GetStaticField(char *className, char *fieldName, char *paramCode); 14 | jvalue GetField(jobject object, char *fieldName, char *paramCode); 15 | 16 | #endif //JIAGU_INVOKE_JAVA_H 17 | -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/utils/memload.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by zhouming on 2021/9/18. 3 | // 4 | 5 | #ifndef JNIDEMO_MEMLOAD_H 6 | #define JNIDEMO_MEMLOAD_H 7 | 8 | #include 9 | 10 | void* load(int sdk_int, void *artHandle, const char *base, size_t size); 11 | std::unique_ptr load23(void *artHandle, const char *base, size_t size); 12 | 13 | #endif //JNIDEMO_MEMLOAD_H 14 | -------------------------------------------------------------------------------- /jiagulibrary/src/main/cpp/utils/plog.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by zhouming on 2021/9/13. 3 | // 4 | 5 | #ifndef PLOG_H 6 | #define PLOG_H 7 | 8 | #include 9 | 10 | #define LOG_TAG "NDK_JIAGU" 11 | #define LOGD(...) if(1) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) 12 | #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) 13 | 14 | #endif //PLOG_H 15 | -------------------------------------------------------------------------------- /jiagulibrary/src/main/java/com/wpf/util/jiagulibrary/StubApp.java: -------------------------------------------------------------------------------- 1 | package com.wpf.util.jiagulibrary; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | import com.wpf.util.jiagulibrary.utils.ApplicationHook; 6 | import com.wpf.util.jiagulibrary.utils.IO; 7 | 8 | import static com.wpf.util.jiagulibrary.utils.AssetsUtil.copyJiaGu; 9 | 10 | public class StubApp extends Application { 11 | /** 12 | * so的版本,格式为: v + 数字 13 | */ 14 | public static final String VERSION = "v2"; 15 | 16 | @Override 17 | protected void attachBaseContext(Context context) { 18 | super.attachBaseContext(context); 19 | 20 | System.load(copyJiaGu(context)); 21 | 22 | attach(this); 23 | } 24 | 25 | @Override 26 | public void onCreate() { 27 | super.onCreate(); 28 | 29 | ApplicationHook.replaceApplicationContext(this); 30 | } 31 | 32 | @Override 33 | public String getPackageName() { 34 | return "jiagu"; // 如果有ContentProvider,修改getPackageName后会重走createPackageContext 35 | } 36 | 37 | @Override 38 | public Context createPackageContext(String packageName, int flags) { 39 | return ApplicationHook.replaceContentProvider(this); 40 | } 41 | 42 | public byte[] invoke1(String s) { 43 | return IO.getDexData(s); 44 | } 45 | 46 | public void invoke2(Application application, String s) { 47 | ApplicationHook.hook(application, s); 48 | } 49 | 50 | public native static void attach(StubApp base); 51 | } 52 | -------------------------------------------------------------------------------- /local.properties: -------------------------------------------------------------------------------- 1 | ## This file must *NOT* be checked into Version Control Systems, 2 | # as it contains information specific to your local configuration. 3 | # 4 | # Location of the SDK. This is only used by Gradle. 5 | # For customization when using a Version Control System, please read the 6 | # header note. 7 | #Mon Dec 04 12:24:53 CST 2023 8 | sdk.dir=C:\\Users\\1\\AppData\\Local\\Android\\Sdk 9 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven("https://maven.aliyun.com/repository/public") 4 | maven("https://maven.aliyun.com/repository/central") 5 | maven("https://maven.aliyun.com/repository/gradle-plugin") 6 | google() 7 | gradlePluginPortal() 8 | mavenCentral() 9 | } 10 | 11 | plugins { 12 | kotlin("multiplatform").version(extra["kotlin.version"] as String) 13 | kotlin("plugin.serialization").version(extra["kotlin.version"] as String) 14 | id("org.jetbrains.compose").version(extra["compose.version"] as String) 15 | id("com.android.application") version "7.4.2" 16 | id("com.android.library") version "7.4.2" 17 | id("org.jetbrains.kotlin.android") version "1.9.21" 18 | } 19 | } 20 | 21 | //没有安装jdk8需要打开 22 | //plugins { 23 | // id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" 24 | //} 25 | 26 | rootProject.name = "ChannelAndSign" 27 | 28 | include(":fileReplace") 29 | //include(":AXMLEditor3") 30 | include(":base") 31 | include(":WebView") 32 | include(":common") 33 | include(":desktop") 34 | include(":dealJiagu") 35 | include(":jiagulibrary") 36 | include(":PGYUpload") 37 | include(":Tools") 38 | -------------------------------------------------------------------------------- /wix311/LuxTasks.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/LuxTasks.dll -------------------------------------------------------------------------------- /wix311/Microsoft.Deployment.Compression.Cab.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/Microsoft.Deployment.Compression.Cab.dll -------------------------------------------------------------------------------- /wix311/Microsoft.Deployment.Compression.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/Microsoft.Deployment.Compression.dll -------------------------------------------------------------------------------- /wix311/Microsoft.Deployment.Resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/Microsoft.Deployment.Resources.dll -------------------------------------------------------------------------------- /wix311/Microsoft.Deployment.WindowsInstaller.Package.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/Microsoft.Deployment.WindowsInstaller.Package.dll -------------------------------------------------------------------------------- /wix311/Microsoft.Deployment.WindowsInstaller.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/Microsoft.Deployment.WindowsInstaller.dll -------------------------------------------------------------------------------- /wix311/ThmViewer.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/ThmViewer.exe -------------------------------------------------------------------------------- /wix311/WixBalExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixBalExtension.dll -------------------------------------------------------------------------------- /wix311/WixComPlusExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixComPlusExtension.dll -------------------------------------------------------------------------------- /wix311/WixCop.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixCop.exe -------------------------------------------------------------------------------- /wix311/WixDependencyExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixDependencyExtension.dll -------------------------------------------------------------------------------- /wix311/WixDifxAppExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixDifxAppExtension.dll -------------------------------------------------------------------------------- /wix311/WixDirectXExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixDirectXExtension.dll -------------------------------------------------------------------------------- /wix311/WixFirewallExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixFirewallExtension.dll -------------------------------------------------------------------------------- /wix311/WixGamingExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixGamingExtension.dll -------------------------------------------------------------------------------- /wix311/WixHttpExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixHttpExtension.dll -------------------------------------------------------------------------------- /wix311/WixIIsExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixIIsExtension.dll -------------------------------------------------------------------------------- /wix311/WixLuxExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixLuxExtension.dll -------------------------------------------------------------------------------- /wix311/WixMsmqExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixMsmqExtension.dll -------------------------------------------------------------------------------- /wix311/WixNetFxExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixNetFxExtension.dll -------------------------------------------------------------------------------- /wix311/WixPSExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixPSExtension.dll -------------------------------------------------------------------------------- /wix311/WixSqlExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixSqlExtension.dll -------------------------------------------------------------------------------- /wix311/WixTagExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixTagExtension.dll -------------------------------------------------------------------------------- /wix311/WixTasks.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixTasks.dll -------------------------------------------------------------------------------- /wix311/WixUIExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixUIExtension.dll -------------------------------------------------------------------------------- /wix311/WixUtilExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixUtilExtension.dll -------------------------------------------------------------------------------- /wix311/WixVSExtension.MSBuild12.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixVSExtension.MSBuild12.dll -------------------------------------------------------------------------------- /wix311/WixVSExtension.MSBuild14.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixVSExtension.MSBuild14.dll -------------------------------------------------------------------------------- /wix311/WixVSExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/WixVSExtension.dll -------------------------------------------------------------------------------- /wix311/candle.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/candle.exe -------------------------------------------------------------------------------- /wix311/candle.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/darice.cub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/darice.cub -------------------------------------------------------------------------------- /wix311/dark.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/dark.exe -------------------------------------------------------------------------------- /wix311/dark.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /wix311/difxapp_x64.wixlib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/difxapp_x64.wixlib -------------------------------------------------------------------------------- /wix311/difxapp_x86.wixlib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/difxapp_x86.wixlib -------------------------------------------------------------------------------- /wix311/doc/DTF.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/doc/DTF.chm -------------------------------------------------------------------------------- /wix311/doc/DTFAPI.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/doc/DTFAPI.chm -------------------------------------------------------------------------------- /wix311/doc/WiX.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/doc/WiX.chm -------------------------------------------------------------------------------- /wix311/heat.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/heat.exe -------------------------------------------------------------------------------- /wix311/heat.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /wix311/insignia.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/insignia.exe -------------------------------------------------------------------------------- /wix311/insignia.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /wix311/light.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/light.exe -------------------------------------------------------------------------------- /wix311/light.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/lit.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/lit.exe -------------------------------------------------------------------------------- /wix311/lit.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/lux.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/lux.exe -------------------------------------------------------------------------------- /wix311/lux.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /wix311/melt.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/melt.exe -------------------------------------------------------------------------------- /wix311/melt.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/mergemod.cub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/mergemod.cub -------------------------------------------------------------------------------- /wix311/mergemod.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/mergemod.dll -------------------------------------------------------------------------------- /wix311/mspatchc.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/mspatchc.dll -------------------------------------------------------------------------------- /wix311/nit.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/nit.exe -------------------------------------------------------------------------------- /wix311/nit.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /wix311/pyro.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/pyro.exe -------------------------------------------------------------------------------- /wix311/pyro.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/retina.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/retina.exe -------------------------------------------------------------------------------- /wix311/retina.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /wix311/sdk/BootstrapperCore.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /wix311/sdk/BootstrapperCore.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/BootstrapperCore.dll -------------------------------------------------------------------------------- /wix311/sdk/DocCompiler.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/DocCompiler.exe -------------------------------------------------------------------------------- /wix311/sdk/MakeSfxCA.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/MakeSfxCA.exe -------------------------------------------------------------------------------- /wix311/sdk/MakeSfxCA.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.Compression.Cab.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.Compression.Cab.dll -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.Compression.Zip.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.Compression.Zip.dll -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.Compression.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.Compression.dll -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.Resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.Resources.dll -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.WindowsInstaller.Linq.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.WindowsInstaller.Linq.dll -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.WindowsInstaller.Package.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.WindowsInstaller.Package.dll -------------------------------------------------------------------------------- /wix311/sdk/Microsoft.Deployment.WindowsInstaller.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/Microsoft.Deployment.WindowsInstaller.dll -------------------------------------------------------------------------------- /wix311/sdk/MsgGen.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/MsgGen.exe -------------------------------------------------------------------------------- /wix311/sdk/XsdGen.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/XsdGen.exe -------------------------------------------------------------------------------- /wix311/sdk/XsdStitch.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/XsdStitch.exe -------------------------------------------------------------------------------- /wix311/sdk/inc/IBootstrapperBAFunction.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #include 6 | 7 | #include "IBootstrapperEngine.h" 8 | 9 | interface IBootstrapperBAFunction 10 | { 11 | STDMETHOD(OnDetect)() = 0; 12 | STDMETHOD(OnDetectComplete)() = 0; 13 | STDMETHOD(OnPlan)() = 0; 14 | STDMETHOD(OnPlanComplete)() = 0; 15 | }; 16 | 17 | #ifdef __cplusplus 18 | extern "C" { 19 | #endif 20 | 21 | typedef HRESULT (WINAPI *PFN_BOOTSTRAPPER_BA_FUNCTION_CREATE)( 22 | __in IBootstrapperEngine* pEngine, 23 | __in HMODULE hModule, 24 | __out IBootstrapperBAFunction** ppBAFunction 25 | ); 26 | 27 | #ifdef __cplusplus 28 | } 29 | #endif 30 | -------------------------------------------------------------------------------- /wix311/sdk/inc/apputil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | // functions 10 | 11 | /******************************************************************** 12 | AppFreeCommandLineArgs - frees argv from AppParseCommandLine. 13 | 14 | ********************************************************************/ 15 | void DAPI AppFreeCommandLineArgs( 16 | __in LPWSTR* argv 17 | ); 18 | 19 | void DAPI AppInitialize( 20 | __in_ecount(cSafelyLoadSystemDlls) LPCWSTR rgsczSafelyLoadSystemDlls[], 21 | __in DWORD cSafelyLoadSystemDlls 22 | ); 23 | 24 | /******************************************************************** 25 | AppInitializeUnsafe - initializes without the full standard safety 26 | precautions for an application. 27 | 28 | ********************************************************************/ 29 | void DAPI AppInitializeUnsafe(); 30 | 31 | /******************************************************************** 32 | AppParseCommandLine - parses the command line using CommandLineToArgvW. 33 | The caller must free the value of pArgv on success 34 | by calling AppFreeCommandLineArgs. 35 | 36 | ********************************************************************/ 37 | DAPI_(HRESULT) AppParseCommandLine( 38 | __in LPCWSTR wzCommandLine, 39 | __in int* argc, 40 | __in LPWSTR** pArgv 41 | ); 42 | 43 | #ifdef __cplusplus 44 | } 45 | #endif 46 | -------------------------------------------------------------------------------- /wix311/sdk/inc/apuputil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | #define ReleaseApupChain(p) if (p) { ApupFreeChain(p); p = NULL; } 10 | #define ReleaseNullApupChain(p) if (p) { ApupFreeChain(p); p = NULL; } 11 | 12 | 13 | const LPCWSTR APPLICATION_SYNDICATION_NAMESPACE = L"http://appsyndication.org/2006/appsyn"; 14 | 15 | typedef enum APUP_HASH_ALGORITHM 16 | { 17 | APUP_HASH_ALGORITHM_UNKNOWN, 18 | APUP_HASH_ALGORITHM_MD5, 19 | APUP_HASH_ALGORITHM_SHA1, 20 | APUP_HASH_ALGORITHM_SHA256, 21 | } APUP_HASH_ALGORITHM; 22 | 23 | 24 | struct APPLICATION_UPDATE_ENCLOSURE 25 | { 26 | LPWSTR wzUrl; 27 | LPWSTR wzLocalName; 28 | DWORD64 dw64Size; 29 | 30 | BYTE* rgbDigest; 31 | DWORD cbDigest; 32 | APUP_HASH_ALGORITHM digestAlgorithm; 33 | 34 | BOOL fInstaller; 35 | }; 36 | 37 | 38 | struct APPLICATION_UPDATE_ENTRY 39 | { 40 | LPWSTR wzApplicationId; 41 | LPWSTR wzApplicationType; 42 | LPWSTR wzTitle; 43 | LPWSTR wzSummary; 44 | LPWSTR wzContentType; 45 | LPWSTR wzContent; 46 | 47 | LPWSTR wzUpgradeId; 48 | BOOL fUpgradeExclusive; 49 | DWORD64 dw64Version; 50 | DWORD64 dw64UpgradeVersion; 51 | 52 | DWORD64 dw64TotalSize; 53 | 54 | DWORD cEnclosures; 55 | APPLICATION_UPDATE_ENCLOSURE* rgEnclosures; 56 | }; 57 | 58 | 59 | struct APPLICATION_UPDATE_CHAIN 60 | { 61 | LPWSTR wzDefaultApplicationId; 62 | LPWSTR wzDefaultApplicationType; 63 | 64 | DWORD cEntries; 65 | APPLICATION_UPDATE_ENTRY* rgEntries; 66 | }; 67 | 68 | 69 | HRESULT DAPI ApupAllocChainFromAtom( 70 | __in ATOM_FEED* pFeed, 71 | __out APPLICATION_UPDATE_CHAIN** ppChain 72 | ); 73 | 74 | HRESULT DAPI ApupFilterChain( 75 | __in APPLICATION_UPDATE_CHAIN* pChain, 76 | __in DWORD64 dw64Version, 77 | __out APPLICATION_UPDATE_CHAIN** ppFilteredChain 78 | ); 79 | 80 | void DAPI ApupFreeChain( 81 | __in APPLICATION_UPDATE_CHAIN* pChain 82 | ); 83 | 84 | #ifdef __cplusplus 85 | } 86 | #endif 87 | -------------------------------------------------------------------------------- /wix311/sdk/inc/balcondition.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | typedef struct _BAL_CONDITION 10 | { 11 | LPWSTR sczCondition; 12 | LPWSTR sczMessage; 13 | } BAL_CONDITION; 14 | 15 | 16 | typedef struct _BAL_CONDITIONS 17 | { 18 | BAL_CONDITION* rgConditions; 19 | DWORD cConditions; 20 | } BAL_CONDITIONS; 21 | 22 | 23 | /******************************************************************* 24 | BalConditionsParseFromXml - loads the conditions from the UX manifest. 25 | 26 | ********************************************************************/ 27 | DAPI_(HRESULT) BalConditionsParseFromXml( 28 | __in BAL_CONDITIONS* pConditions, 29 | __in IXMLDOMDocument* pixdManifest, 30 | __in_opt WIX_LOCALIZATION* pWixLoc 31 | ); 32 | 33 | 34 | /******************************************************************* 35 | BalConditionEvaluate - evaluates condition against the provided IBurnCore. 36 | 37 | NOTE: psczMessage is optional. 38 | ********************************************************************/ 39 | DAPI_(HRESULT) BalConditionEvaluate( 40 | __in BAL_CONDITION* pCondition, 41 | __in IBootstrapperEngine* pEngine, 42 | __out BOOL* pfResult, 43 | __out_z_opt LPWSTR* psczMessage 44 | ); 45 | 46 | 47 | /******************************************************************* 48 | BalConditionsUninitialize - uninitializes any conditions previously loaded. 49 | 50 | ********************************************************************/ 51 | DAPI_(void) BalConditionsUninitialize( 52 | __in BAL_CONDITIONS* pConditions 53 | ); 54 | 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | -------------------------------------------------------------------------------- /wix311/sdk/inc/butil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | enum BUNDLE_INSTALL_CONTEXT 10 | { 11 | BUNDLE_INSTALL_CONTEXT_MACHINE, 12 | BUNDLE_INSTALL_CONTEXT_USER, 13 | }; 14 | 15 | HRESULT DAPI BundleGetBundleInfo( 16 | __in LPCWSTR szBundleId, // Bundle code 17 | __in LPCWSTR szAttribute, // attribute name 18 | __out_ecount_opt(*pcchValueBuf) LPWSTR lpValueBuf, // returned value, NULL if not desired 19 | __inout_opt LPDWORD pcchValueBuf // in/out buffer character count 20 | ); 21 | 22 | HRESULT DAPI BundleEnumRelatedBundle( 23 | __in LPCWSTR lpUpgradeCode, 24 | __in BUNDLE_INSTALL_CONTEXT context, 25 | __inout PDWORD pdwStartIndex, 26 | __out_ecount(MAX_GUID_CHARS+1) LPWSTR lpBundleIdBuf 27 | ); 28 | 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | -------------------------------------------------------------------------------- /wix311/sdk/inc/cabcutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | // Callback from PFNFCIGETNEXTCABINET CabCGetNextCabinet method 10 | // First argument is the name of splitting cabinet without extension e.g. "cab1" 11 | // Second argument is name of the new cabinet that would be formed by splitting e.g. "cab1b.cab" 12 | // Third argument is the file token of the first file present in the splitting cabinet 13 | typedef void (__stdcall * FileSplitCabNamesCallback)(LPWSTR, LPWSTR, LPWSTR); 14 | 15 | #define CAB_MAX_SIZE 0x7FFFFFFF // (see KB: Q174866) 16 | 17 | #ifdef __cplusplus 18 | extern "C" { 19 | #endif 20 | 21 | extern const int CABC_HANDLE_BYTES; 22 | 23 | // time vs. space trade-off 24 | typedef enum COMPRESSION_TYPE 25 | { 26 | COMPRESSION_TYPE_NONE, // fastest 27 | COMPRESSION_TYPE_LOW, 28 | COMPRESSION_TYPE_MEDIUM, 29 | COMPRESSION_TYPE_HIGH, // smallest 30 | COMPRESSION_TYPE_MSZIP 31 | } COMPRESSION_TYPE; 32 | 33 | // functions 34 | HRESULT DAPI CabCBegin( 35 | __in_z LPCWSTR wzCab, 36 | __in_z LPCWSTR wzCabDir, 37 | __in DWORD dwMaxFiles, 38 | __in DWORD dwMaxSize, 39 | __in DWORD dwMaxThresh, 40 | __in COMPRESSION_TYPE ct, 41 | __out_bcount(CABC_HANDLE_BYTES) HANDLE *phContext 42 | ); 43 | HRESULT DAPI CabCNextCab( 44 | __in_bcount(CABC_HANDLE_BYTES) HANDLE hContext 45 | ); 46 | HRESULT DAPI CabCAddFile( 47 | __in_z LPCWSTR wzFile, 48 | __in_z_opt LPCWSTR wzToken, 49 | __in_opt PMSIFILEHASHINFO pmfHash, 50 | __in_bcount(CABC_HANDLE_BYTES) HANDLE hContext 51 | ); 52 | HRESULT DAPI CabCFinish( 53 | __in_bcount(CABC_HANDLE_BYTES) HANDLE hContext, 54 | __in_opt FileSplitCabNamesCallback fileSplitCabNamesCallback 55 | ); 56 | void DAPI CabCCancel( 57 | __in_bcount(CABC_HANDLE_BYTES) HANDLE hContext 58 | ); 59 | 60 | #ifdef __cplusplus 61 | } 62 | #endif 63 | -------------------------------------------------------------------------------- /wix311/sdk/inc/cabutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #include 6 | #include 7 | 8 | #ifdef __cplusplus 9 | extern "C" { 10 | #endif 11 | 12 | // structs 13 | 14 | 15 | // callback function prototypes 16 | typedef HRESULT (*CAB_CALLBACK_OPEN_FILE)(LPCWSTR wzFile, INT_PTR* ppFile); 17 | typedef HRESULT (*CAB_CALLBACK_READ_FILE)(INT_PTR pFile, LPVOID pvData, DWORD cbData, DWORD* pcbRead); 18 | typedef HRESULT (*CAB_CALLBACK_WRITE_FILE)(INT_PTR pFile, LPVOID pvData, DWORD cbData, DWORD* pcbRead); 19 | typedef LONG (*CAB_CALLBACK_SEEK_FILE)(INT_PTR pFile, DWORD dwMove, DWORD dwMoveMethod); 20 | typedef HRESULT (*CAB_CALLBACK_CLOSE_FILE)(INT_PTR pFile); 21 | 22 | typedef HRESULT (*CAB_CALLBACK_BEGIN_FILE)(LPCWSTR wzFileId, FILETIME* pftFileTime, DWORD cbFileSize, LPVOID pvContext, INT_PTR* ppFile); 23 | typedef HRESULT (*CAB_CALLBACK_END_FILE)(LPCWSTR wzFileId, LPVOID pvContext, INT_PTR pFile); 24 | typedef HRESULT (*CAB_CALLBACK_PROGRESS)(BOOL fBeginFile, LPCWSTR wzFileId, LPVOID pvContext); 25 | 26 | // function type with calling convention of __stdcall that .NET 1.1 understands only 27 | // .NET 2.0 will not need this 28 | typedef INT_PTR (FAR __stdcall *STDCALL_PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin); 29 | 30 | 31 | // functions 32 | HRESULT DAPI CabInitialize( 33 | __in BOOL fDelayLoad 34 | ); 35 | void DAPI CabUninitialize( 36 | ); 37 | 38 | HRESULT DAPI CabExtract( 39 | __in_z LPCWSTR wzCabinet, 40 | __in_z LPCWSTR wzExtractFile, 41 | __in_z LPCWSTR wzExtractDir, 42 | __in_opt CAB_CALLBACK_PROGRESS pfnProgress, 43 | __in_opt LPVOID pvContext, 44 | __in DWORD64 dw64EmbeddedOffset 45 | ); 46 | 47 | HRESULT DAPI CabEnumerate( 48 | __in_z LPCWSTR wzCabinet, 49 | __in_z LPCWSTR wzEnumerateFile, 50 | __in STDCALL_PFNFDINOTIFY pfnNotify, 51 | __in DWORD64 dw64EmbeddedOffset 52 | ); 53 | 54 | #ifdef __cplusplus 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /wix311/sdk/inc/certutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #define ReleaseCertStore(p) if (p) { ::CertCloseStore(p, 0); p = NULL; } 6 | #define ReleaseCertContext(p) if (p) { ::CertFreeCertificateContext(p); p = NULL; } 7 | #define ReleaseCertChain(p) if (p) { ::CertFreeCertificateChain(p); p = NULL; } 8 | 9 | #ifdef __cplusplus 10 | extern "C" { 11 | #endif 12 | 13 | HRESULT DAPI CertReadProperty( 14 | __in PCCERT_CONTEXT pCertContext, 15 | __in DWORD dwProperty, 16 | __out_bcount(*pcbValue) LPVOID pvValue, 17 | __out_opt DWORD* pcbValue 18 | ); 19 | 20 | HRESULT DAPI CertGetAuthenticodeSigningTimestamp( 21 | __in CMSG_SIGNER_INFO* pSignerInfo, 22 | __out FILETIME* pft 23 | ); 24 | 25 | HRESULT DAPI GetCryptProvFromCert( 26 | __in_opt HWND hwnd, 27 | __in PCCERT_CONTEXT pCert, 28 | __out HCRYPTPROV *phCryptProv, 29 | __out DWORD *pdwKeySpec, 30 | __in BOOL *pfDidCryptAcquire, 31 | __deref_opt_out LPWSTR *ppwszTmpContainer, 32 | __deref_opt_out LPWSTR *ppwszProviderName, 33 | __out DWORD *pdwProviderType 34 | ); 35 | 36 | HRESULT DAPI FreeCryptProvFromCert( 37 | __in BOOL fAcquired, 38 | __in HCRYPTPROV hProv, 39 | __in_opt LPWSTR pwszCapiProvider, 40 | __in DWORD dwProviderType, 41 | __in_opt LPWSTR pwszTmpContainer 42 | ); 43 | 44 | HRESULT DAPI GetProvSecurityDesc( 45 | __in HCRYPTPROV hProv, 46 | __deref_out SECURITY_DESCRIPTOR** pSecurity 47 | ); 48 | 49 | HRESULT DAPI SetProvSecurityDesc( 50 | __in HCRYPTPROV hProv, 51 | __in SECURITY_DESCRIPTOR* pSecurity 52 | ); 53 | 54 | BOOL DAPI CertHasPrivateKey( 55 | __in PCCERT_CONTEXT pCertContext, 56 | __out_opt DWORD* pdwKeySpec 57 | ); 58 | 59 | HRESULT DAPI CertInstallSingleCertificate( 60 | __in HCERTSTORE hStore, 61 | __in PCCERT_CONTEXT pCertContext, 62 | __in LPCWSTR wzName 63 | ); 64 | #ifdef __cplusplus 65 | } 66 | #endif 67 | -------------------------------------------------------------------------------- /wix311/sdk/inc/dirutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | typedef enum DIR_DELETE 6 | { 7 | DIR_DELETE_FILES = 1, 8 | DIR_DELETE_RECURSE = 2, 9 | DIR_DELETE_SCHEDULE = 4, 10 | } DIR_DELETE; 11 | 12 | #ifdef __cplusplus 13 | extern "C" { 14 | #endif 15 | 16 | BOOL DAPI DirExists( 17 | __in_z LPCWSTR wzPath, 18 | __out_opt DWORD *pdwAttributes 19 | ); 20 | 21 | HRESULT DAPI DirCreateTempPath( 22 | __in_z LPCWSTR wzPrefix, 23 | __out_ecount_z(cchPath) LPWSTR wzPath, 24 | __in DWORD cchPath 25 | ); 26 | 27 | HRESULT DAPI DirEnsureExists( 28 | __in_z LPCWSTR wzPath, 29 | __in_opt LPSECURITY_ATTRIBUTES psa 30 | ); 31 | 32 | HRESULT DAPI DirEnsureDelete( 33 | __in_z LPCWSTR wzPath, 34 | __in BOOL fDeleteFiles, 35 | __in BOOL fRecurse 36 | ); 37 | 38 | HRESULT DAPI DirEnsureDeleteEx( 39 | __in_z LPCWSTR wzPath, 40 | __in DWORD dwFlags 41 | ); 42 | 43 | DWORD DAPI DirDeleteEmptyDirectoriesToRoot( 44 | __in_z LPCWSTR wzPath, 45 | __in DWORD dwFlags 46 | ); 47 | 48 | HRESULT DAPI DirGetCurrent( 49 | __deref_out_z LPWSTR* psczCurrentDirectory 50 | ); 51 | 52 | HRESULT DAPI DirSetCurrent( 53 | __in_z LPCWSTR wzDirectory 54 | ); 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | 60 | -------------------------------------------------------------------------------- /wix311/sdk/inc/dlutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | typedef HRESULT (WINAPI *LPAUTHENTICATION_ROUTINE)( 10 | __in LPVOID pVoid, 11 | __in HINTERNET hUrl, 12 | __in long lHttpCode, 13 | __out BOOL* pfRetrySend, 14 | __out BOOL* pfRetry 15 | ); 16 | 17 | typedef int (WINAPI *LPCANCEL_ROUTINE)( 18 | __in HRESULT hrError, 19 | __in_z_opt LPCWSTR wzError, 20 | __in BOOL fAllowRetry, 21 | __in_opt LPVOID pvContext 22 | ); 23 | 24 | // structs 25 | typedef struct _DOWNLOAD_SOURCE 26 | { 27 | LPWSTR sczUrl; 28 | LPWSTR sczUser; 29 | LPWSTR sczPassword; 30 | } DOWNLOAD_SOURCE; 31 | 32 | typedef struct _DOWNLOAD_CACHE_CALLBACK 33 | { 34 | LPPROGRESS_ROUTINE pfnProgress; 35 | LPCANCEL_ROUTINE pfnCancel; 36 | LPVOID pv; 37 | } DOWNLOAD_CACHE_CALLBACK; 38 | 39 | typedef struct _DOWNLOAD_AUTHENTICATION_CALLBACK 40 | { 41 | LPAUTHENTICATION_ROUTINE pfnAuthenticate; 42 | LPVOID pv; 43 | } DOWNLOAD_AUTHENTICATION_CALLBACK; 44 | 45 | 46 | // functions 47 | 48 | HRESULT DAPI DownloadUrl( 49 | __in DOWNLOAD_SOURCE* pDownloadSource, 50 | __in DWORD64 dw64AuthoredDownloadSize, 51 | __in LPCWSTR wzDestinationPath, 52 | __in_opt DOWNLOAD_CACHE_CALLBACK* pCache, 53 | __in_opt DOWNLOAD_AUTHENTICATION_CALLBACK* pAuthenticate 54 | ); 55 | 56 | 57 | #ifdef __cplusplus 58 | } 59 | #endif 60 | -------------------------------------------------------------------------------- /wix311/sdk/inc/gdiputil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #define ExitOnGdipFailure(g, x, s) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, s); goto LExit; } } 6 | #define ExitOnGdipFailure1(g, x, f, s) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } } 7 | #define ExitOnGdipFailure2(g, x, f, s, t) { x = GdipHresultFromStatus(g); if (FAILED(x)) { Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } } 8 | 9 | #ifdef __cplusplus 10 | extern "C" { 11 | #endif 12 | 13 | HRESULT DAPI GdipBitmapFromResource( 14 | __in_opt HINSTANCE hinst, 15 | __in_z LPCSTR szId, 16 | __out Gdiplus::Bitmap **ppBitmap 17 | ); 18 | 19 | HRESULT DAPI GdipBitmapFromFile( 20 | __in_z LPCWSTR wzFileName, 21 | __out Gdiplus::Bitmap **ppBitmap 22 | ); 23 | 24 | HRESULT DAPI GdipHresultFromStatus( 25 | __in Gdiplus::Status gs 26 | ); 27 | 28 | #ifdef __cplusplus 29 | } 30 | #endif 31 | -------------------------------------------------------------------------------- /wix311/sdk/inc/inetutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | #define ReleaseInternet(h) if (h) { ::InternetCloseHandle(h); h = NULL; } 10 | #define ReleaseNullInternet(h) if (h) { ::InternetCloseHandle(h); h = NULL; } 11 | 12 | 13 | // functions 14 | HRESULT DAPI InternetGetSizeByHandle( 15 | __in HINTERNET hiFile, 16 | __out LONGLONG* pllSize 17 | ); 18 | 19 | HRESULT DAPI InternetGetCreateTimeByHandle( 20 | __in HINTERNET hiFile, 21 | __out LPFILETIME pft 22 | ); 23 | 24 | HRESULT DAPI InternetQueryInfoString( 25 | __in HINTERNET h, 26 | __in DWORD dwInfo, 27 | __deref_out_z LPWSTR* psczValue 28 | ); 29 | 30 | HRESULT DAPI InternetQueryInfoNumber( 31 | __in HINTERNET h, 32 | __in DWORD dwInfo, 33 | __out LONG* plInfo 34 | ); 35 | 36 | #ifdef __cplusplus 37 | } 38 | #endif 39 | 40 | -------------------------------------------------------------------------------- /wix311/sdk/inc/memutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | #define ReleaseMem(p) if (p) { MemFree(p); } 10 | #define ReleaseNullMem(p) if (p) { MemFree(p); p = NULL; } 11 | 12 | HRESULT DAPI MemInitialize(); 13 | void DAPI MemUninitialize(); 14 | 15 | LPVOID DAPI MemAlloc( 16 | __in SIZE_T cbSize, 17 | __in BOOL fZero 18 | ); 19 | LPVOID DAPI MemReAlloc( 20 | __in LPVOID pv, 21 | __in SIZE_T cbSize, 22 | __in BOOL fZero 23 | ); 24 | HRESULT DAPI MemReAllocSecure( 25 | __in LPVOID pv, 26 | __in SIZE_T cbSize, 27 | __in BOOL fZero, 28 | __deref_out LPVOID* ppvNew 29 | ); 30 | HRESULT DAPI MemEnsureArraySize( 31 | __deref_out_bcount(cArray * cbArrayType) LPVOID* ppvArray, 32 | __in DWORD cArray, 33 | __in SIZE_T cbArrayType, 34 | __in DWORD dwGrowthCount 35 | ); 36 | HRESULT DAPI MemInsertIntoArray( 37 | __deref_out_bcount((cExistingArray + cNumInsertItems) * cbArrayType) LPVOID* ppvArray, 38 | __in DWORD dwInsertIndex, 39 | __in DWORD cNumInsertItems, 40 | __in DWORD cExistingArray, 41 | __in SIZE_T cbArrayType, 42 | __in DWORD dwGrowthCount 43 | ); 44 | 45 | HRESULT DAPI MemFree( 46 | __in LPVOID pv 47 | ); 48 | SIZE_T DAPI MemSize( 49 | __in LPCVOID pv 50 | ); 51 | 52 | #ifdef __cplusplus 53 | } 54 | #endif 55 | 56 | -------------------------------------------------------------------------------- /wix311/sdk/inc/metautil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #ifdef __cplusplus 11 | extern "C" { 12 | #endif 13 | 14 | // structs 15 | 16 | // prototypes 17 | HRESULT DAPI MetaFindWebBase( 18 | __in IMSAdminBaseW* piMetabase, 19 | __in_z LPCWSTR wzIP, 20 | __in int iPort, 21 | __in_z LPCWSTR wzHeader, 22 | __in BOOL fSecure, 23 | __out_ecount(cchWebBase) LPWSTR wzWebBase, 24 | __in DWORD cchWebBase 25 | ); 26 | HRESULT DAPI MetaFindFreeWebBase( 27 | __in IMSAdminBaseW* piMetabase, 28 | __out_ecount(cchWebBase) LPWSTR wzWebBase, 29 | __in DWORD cchWebBase 30 | ); 31 | 32 | HRESULT DAPI MetaOpenKey( 33 | __in IMSAdminBaseW* piMetabase, 34 | __in METADATA_HANDLE mhKey, 35 | __in_z LPCWSTR wzKey, 36 | __in DWORD dwAccess, 37 | __in DWORD cRetries, 38 | __out METADATA_HANDLE* pmh 39 | ); 40 | HRESULT DAPI MetaGetValue( 41 | __in IMSAdminBaseW* piMetabase, 42 | __in METADATA_HANDLE mhKey, 43 | __in_z LPCWSTR wzKey, 44 | __inout METADATA_RECORD* pmr 45 | ); 46 | void DAPI MetaFreeValue( 47 | __in METADATA_RECORD* pmr 48 | ); 49 | 50 | #ifdef __cplusplus 51 | } 52 | #endif 53 | -------------------------------------------------------------------------------- /wix311/sdk/inc/osutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | typedef enum OS_VERSION 10 | { 11 | OS_VERSION_UNKNOWN, 12 | OS_VERSION_WINNT, 13 | OS_VERSION_WIN2000, 14 | OS_VERSION_WINXP, 15 | OS_VERSION_WIN2003, 16 | OS_VERSION_VISTA, 17 | OS_VERSION_WIN2008, 18 | OS_VERSION_WIN7, 19 | OS_VERSION_WIN2008_R2, 20 | OS_VERSION_FUTURE 21 | } OS_VERSION; 22 | 23 | void DAPI OsGetVersion( 24 | __out OS_VERSION* pVersion, 25 | __out DWORD* pdwServicePack 26 | ); 27 | HRESULT DAPI OsCouldRunPrivileged( 28 | __out BOOL* pfPrivileged 29 | ); 30 | HRESULT DAPI OsIsRunningPrivileged( 31 | __out BOOL* pfPrivileged 32 | ); 33 | HRESULT DAPI OsIsUacEnabled( 34 | __out BOOL* pfUacEnabled 35 | ); 36 | 37 | #ifdef __cplusplus 38 | } 39 | #endif 40 | -------------------------------------------------------------------------------- /wix311/sdk/inc/perfutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | // structs 10 | 11 | 12 | // functions 13 | void DAPI PerfInitialize( 14 | ); 15 | void DAPI PerfClickTime( 16 | __out_opt LARGE_INTEGER* pliElapsed 17 | ); 18 | double DAPI PerfConvertToSeconds( 19 | __in const LARGE_INTEGER* pli 20 | ); 21 | 22 | #ifdef __cplusplus 23 | } 24 | #endif 25 | -------------------------------------------------------------------------------- /wix311/sdk/inc/polcutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | const LPCWSTR POLICY_BURN_REGISTRY_PATH = L"WiX\\Burn"; 10 | 11 | /******************************************************************** 12 | PolcReadNumber - reads a number from policy. 13 | 14 | NOTE: S_FALSE returned if policy not set. 15 | NOTE: out is set to default on S_FALSE or any error. 16 | ********************************************************************/ 17 | HRESULT DAPI PolcReadNumber( 18 | __in_z LPCWSTR wzPolicyPath, 19 | __in_z LPCWSTR wzPolicyName, 20 | __in DWORD dwDefault, 21 | __out DWORD* pdw 22 | ); 23 | 24 | /******************************************************************** 25 | PolcReadString - reads a string from policy. 26 | 27 | NOTE: S_FALSE returned if policy not set. 28 | NOTE: out is set to default on S_FALSE or any error. 29 | ********************************************************************/ 30 | HRESULT DAPI PolcReadString( 31 | __in_z LPCWSTR wzPolicyPath, 32 | __in_z LPCWSTR wzPolicyName, 33 | __in_z_opt LPCWSTR wzDefault, 34 | __deref_out_z LPWSTR* pscz 35 | ); 36 | 37 | #ifdef __cplusplus 38 | } 39 | #endif 40 | -------------------------------------------------------------------------------- /wix311/sdk/inc/procutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | // structs 10 | typedef struct _PROC_FILESYSTEMREDIRECTION 11 | { 12 | BOOL fDisabled; 13 | LPVOID pvRevertState; 14 | } PROC_FILESYSTEMREDIRECTION; 15 | 16 | HRESULT DAPI ProcElevated( 17 | __in HANDLE hProcess, 18 | __out BOOL* pfElevated 19 | ); 20 | 21 | HRESULT DAPI ProcWow64( 22 | __in HANDLE hProcess, 23 | __out BOOL* pfWow64 24 | ); 25 | HRESULT DAPI ProcDisableWowFileSystemRedirection( 26 | __in PROC_FILESYSTEMREDIRECTION* pfsr 27 | ); 28 | HRESULT DAPI ProcRevertWowFileSystemRedirection( 29 | __in PROC_FILESYSTEMREDIRECTION* pfsr 30 | ); 31 | 32 | HRESULT DAPI ProcExec( 33 | __in_z LPCWSTR wzExecutablePath, 34 | __in_z_opt LPCWSTR wzCommandLine, 35 | __in int nCmdShow, 36 | __out HANDLE *phProcess 37 | ); 38 | HRESULT DAPI ProcExecute( 39 | __in_z LPWSTR wzCommand, 40 | __out HANDLE *phProcess, 41 | __out_opt HANDLE *phChildStdIn, 42 | __out_opt HANDLE *phChildStdOutErr 43 | ); 44 | HRESULT DAPI ProcWaitForCompletion( 45 | __in HANDLE hProcess, 46 | __in DWORD dwTimeout, 47 | __out DWORD *pReturnCode 48 | ); 49 | HRESULT DAPI ProcWaitForIds( 50 | __in_ecount(cProcessIds) const DWORD* pdwProcessIds, 51 | __in DWORD cProcessIds, 52 | __in DWORD dwMilliseconds 53 | ); 54 | HRESULT DAPI ProcCloseIds( 55 | __in_ecount(cProcessIds) const DWORD* pdwProcessIds, 56 | __in DWORD cProcessIds 57 | ); 58 | 59 | // following code in proc2utl.cpp due to dependency on PSAPI.DLL. 60 | HRESULT DAPI ProcFindAllIdsFromExeName( 61 | __in_z LPCWSTR wzExeName, 62 | __out DWORD** ppdwProcessIds, 63 | __out DWORD* pcProcessIds 64 | ); 65 | 66 | // following code in proc3utl.cpp due to dependency on Wtsapi32.DLL. 67 | HRESULT DAPI ProcExecuteAsInteractiveUser( 68 | __in_z LPCWSTR wzExecutablePath, 69 | __in_z LPCWSTR wzCommand, 70 | __out HANDLE *phProcess 71 | ); 72 | 73 | #ifdef __cplusplus 74 | } 75 | #endif 76 | -------------------------------------------------------------------------------- /wix311/sdk/inc/resrutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | HRESULT DAPI ResGetStringLangId( 10 | __in_opt LPCWSTR wzPath, 11 | __in UINT uID, 12 | __out WORD *pwLangId 13 | ); 14 | 15 | HRESULT DAPI ResReadString( 16 | __in HINSTANCE hinst, 17 | __in UINT uID, 18 | __deref_out_z LPWSTR* ppwzString 19 | ); 20 | 21 | HRESULT DAPI ResReadStringAnsi( 22 | __in HINSTANCE hinst, 23 | __in UINT uID, 24 | __deref_out_z LPSTR* ppszString 25 | ); 26 | 27 | HRESULT DAPI ResReadData( 28 | __in_opt HINSTANCE hinst, 29 | __in_z LPCSTR szDataName, 30 | __deref_out_bcount(*pcb) PVOID *ppv, 31 | __out DWORD *pcb 32 | ); 33 | 34 | HRESULT DAPI ResExportDataToFile( 35 | __in_z LPCSTR szDataName, 36 | __in_z LPCWSTR wzTargetFile, 37 | __in DWORD dwCreationDisposition 38 | ); 39 | 40 | #ifdef __cplusplus 41 | } 42 | #endif 43 | 44 | -------------------------------------------------------------------------------- /wix311/sdk/inc/reswutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | HRESULT DAPI ResWriteString( 10 | __in_z LPCWSTR wzResourceFile, 11 | __in DWORD dwDataId, 12 | __in_z LPCWSTR wzData, 13 | __in WORD wLangId 14 | ); 15 | 16 | HRESULT DAPI ResWriteData( 17 | __in_z LPCWSTR wzResourceFile, 18 | __in_z LPCSTR szDataName, 19 | __in PVOID pData, 20 | __in DWORD cbData 21 | ); 22 | 23 | HRESULT DAPI ResImportDataFromFile( 24 | __in_z LPCWSTR wzTargetFile, 25 | __in_z LPCWSTR wzSourceFile, 26 | __in_z LPCSTR szDataName 27 | ); 28 | 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | -------------------------------------------------------------------------------- /wix311/sdk/inc/rexutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #include 6 | #include 7 | 8 | #ifdef __cplusplus 9 | extern "C" { 10 | #endif 11 | 12 | // defines 13 | #define FILETABLESIZE 40 14 | 15 | // structs 16 | struct MEM_FILE 17 | { 18 | LPCBYTE vpStart; 19 | UINT uiCurrent; 20 | UINT uiLength; 21 | }; 22 | 23 | typedef enum FAKE_FILE_TYPE { NORMAL_FILE, MEMORY_FILE } FAKE_FILE_TYPE; 24 | 25 | typedef HRESULT (*REX_CALLBACK_PROGRESS)(BOOL fBeginFile, LPCWSTR wzFileId, LPVOID pvContext); 26 | typedef VOID (*REX_CALLBACK_WRITE)(UINT cb); 27 | 28 | 29 | struct FAKE_FILE // used __in internal file table 30 | { 31 | BOOL fUsed; 32 | FAKE_FILE_TYPE fftType; 33 | MEM_FILE mfFile; // State for memory file 34 | HANDLE hFile; // Handle for disk file 35 | }; 36 | 37 | // functions 38 | HRESULT RexInitialize(); 39 | void RexUninitialize(); 40 | 41 | HRESULT RexExtract( 42 | __in_z LPCSTR szResource, 43 | __in_z LPCWSTR wzExtractId, 44 | __in_z LPCWSTR wzExtractDir, 45 | __in_z LPCWSTR wzExtractName, 46 | __in REX_CALLBACK_PROGRESS pfnProgress, 47 | __in REX_CALLBACK_WRITE pfnWrite, 48 | __in LPVOID pvContext 49 | ); 50 | 51 | #ifdef __cplusplus 52 | } 53 | #endif 54 | 55 | -------------------------------------------------------------------------------- /wix311/sdk/inc/rmutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | typedef struct _RMU_SESSION *PRMU_SESSION; 10 | 11 | HRESULT DAPI RmuJoinSession( 12 | __out PRMU_SESSION *ppSession, 13 | __in_z LPCWSTR wzSessionKey 14 | ); 15 | 16 | HRESULT DAPI RmuAddFile( 17 | __in PRMU_SESSION pSession, 18 | __in_z LPCWSTR wzPath 19 | ); 20 | 21 | HRESULT DAPI RmuAddProcessById( 22 | __in PRMU_SESSION pSession, 23 | __in DWORD dwProcessId 24 | ); 25 | 26 | HRESULT DAPI RmuAddProcessesByName( 27 | __in PRMU_SESSION pSession, 28 | __in_z LPCWSTR wzProcessName 29 | ); 30 | 31 | HRESULT DAPI RmuAddService( 32 | __in PRMU_SESSION pSession, 33 | __in_z LPCWSTR wzServiceName 34 | ); 35 | 36 | HRESULT DAPI RmuRegisterResources( 37 | __in PRMU_SESSION pSession 38 | ); 39 | 40 | HRESULT DAPI RmuEndSession( 41 | __in PRMU_SESSION pSession 42 | ); 43 | 44 | #ifdef __cplusplus 45 | } 46 | #endif 47 | -------------------------------------------------------------------------------- /wix311/sdk/inc/rssutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | #define ReleaseRssChannel(p) if (p) { RssFreeChannel(p); } 10 | #define ReleaseNullRssChannel(p) if (p) { RssFreeChannel(p); p = NULL; } 11 | 12 | 13 | struct RSS_UNKNOWN_ATTRIBUTE 14 | { 15 | LPWSTR wzNamespace; 16 | LPWSTR wzAttribute; 17 | LPWSTR wzValue; 18 | 19 | RSS_UNKNOWN_ATTRIBUTE* pNext; 20 | }; 21 | 22 | struct RSS_UNKNOWN_ELEMENT 23 | { 24 | LPWSTR wzNamespace; 25 | LPWSTR wzElement; 26 | LPWSTR wzValue; 27 | 28 | RSS_UNKNOWN_ATTRIBUTE* pAttributes; 29 | RSS_UNKNOWN_ELEMENT* pNext; 30 | }; 31 | 32 | struct RSS_ITEM 33 | { 34 | LPWSTR wzTitle; 35 | LPWSTR wzLink; 36 | LPWSTR wzDescription; 37 | 38 | LPWSTR wzGuid; 39 | FILETIME ftPublished; 40 | 41 | LPWSTR wzEnclosureUrl; 42 | DWORD dwEnclosureSize; 43 | LPWSTR wzEnclosureType; 44 | 45 | RSS_UNKNOWN_ELEMENT* pUnknownElements; 46 | }; 47 | 48 | struct RSS_CHANNEL 49 | { 50 | LPWSTR wzTitle; 51 | LPWSTR wzLink; 52 | LPWSTR wzDescription; 53 | DWORD dwTimeToLive; 54 | 55 | RSS_UNKNOWN_ELEMENT* pUnknownElements; 56 | 57 | DWORD cItems; 58 | RSS_ITEM rgItems[1]; 59 | }; 60 | 61 | HRESULT DAPI RssInitialize( 62 | ); 63 | 64 | void DAPI RssUninitialize( 65 | ); 66 | 67 | HRESULT DAPI RssParseFromString( 68 | __in_z LPCWSTR wzRssString, 69 | __out RSS_CHANNEL **ppChannel 70 | ); 71 | 72 | HRESULT DAPI RssParseFromFile( 73 | __in_z LPCWSTR wzRssFile, 74 | __out RSS_CHANNEL **ppChannel 75 | ); 76 | 77 | // Adding this until we have the updated specstrings.h 78 | #ifndef __in_xcount 79 | #define __in_xcount(size) 80 | #endif 81 | 82 | void DAPI RssFreeChannel( 83 | __in_xcount(pChannel->cItems) RSS_CHANNEL *pChannel 84 | ); 85 | 86 | #ifdef __cplusplus 87 | } 88 | #endif 89 | 90 | -------------------------------------------------------------------------------- /wix311/sdk/inc/shelutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifndef REFKNOWNFOLDERID 6 | #define REFKNOWNFOLDERID REFGUID 7 | #endif 8 | 9 | #ifdef __cplusplus 10 | extern "C" { 11 | #endif 12 | 13 | typedef BOOL (STDAPICALLTYPE *PFN_SHELLEXECUTEEXW)( 14 | __inout LPSHELLEXECUTEINFOW lpExecInfo 15 | ); 16 | 17 | void DAPI ShelFunctionOverride( 18 | __in_opt PFN_SHELLEXECUTEEXW pfnShellExecuteExW 19 | ); 20 | HRESULT DAPI ShelExec( 21 | __in_z LPCWSTR wzTargetPath, 22 | __in_opt LPCWSTR wzParameters, 23 | __in_opt LPCWSTR wzVerb, 24 | __in_opt LPCWSTR wzWorkingDirectory, 25 | __in int nShowCmd, 26 | __in_opt HWND hwndParent, 27 | __out_opt HANDLE* phProcess 28 | ); 29 | HRESULT DAPI ShelExecUnelevated( 30 | __in_z LPCWSTR wzTargetPath, 31 | __in_z_opt LPCWSTR wzParameters, 32 | __in_z_opt LPCWSTR wzVerb, 33 | __in_z_opt LPCWSTR wzWorkingDirectory, 34 | __in int nShowCmd 35 | ); 36 | HRESULT DAPI ShelGetFolder( 37 | __out_z LPWSTR* psczFolderPath, 38 | __in int csidlFolder 39 | ); 40 | HRESULT DAPI ShelGetKnownFolder( 41 | __out_z LPWSTR* psczFolderPath, 42 | __in REFKNOWNFOLDERID rfidFolder 43 | ); 44 | 45 | #ifdef __cplusplus 46 | } 47 | #endif 48 | -------------------------------------------------------------------------------- /wix311/sdk/inc/srputil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | 10 | typedef enum SRP_ACTION 11 | { 12 | SRP_ACTION_UNKNOWN, 13 | SRP_ACTION_UNINSTALL, 14 | SRP_ACTION_INSTALL, 15 | SRP_ACTION_MODIFY, 16 | } SRP_ACTION; 17 | 18 | 19 | /******************************************************************** 20 | SrpInitialize - initializes system restore point functionality. 21 | 22 | *******************************************************************/ 23 | DAPI_(HRESULT) SrpInitialize( 24 | __in BOOL fInitializeComSecurity 25 | ); 26 | 27 | /******************************************************************** 28 | SrpUninitialize - uninitializes system restore point functionality. 29 | 30 | *******************************************************************/ 31 | DAPI_(void) SrpUninitialize(); 32 | 33 | /******************************************************************** 34 | SrpCreateRestorePoint - creates a system restore point. 35 | 36 | *******************************************************************/ 37 | DAPI_(HRESULT) SrpCreateRestorePoint( 38 | __in_z LPCWSTR wzApplicationName, 39 | __in SRP_ACTION action 40 | ); 41 | 42 | #ifdef __cplusplus 43 | } 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /wix311/sdk/inc/svcutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | 10 | #define ReleaseServiceHandle(h) if (h) { ::CloseServiceHandle(h); h = NULL; } 11 | 12 | 13 | HRESULT DAPI SvcQueryConfig( 14 | __in SC_HANDLE sch, 15 | __out QUERY_SERVICE_CONFIGW** ppConfig 16 | ); 17 | 18 | 19 | #ifdef __cplusplus 20 | } 21 | #endif 22 | -------------------------------------------------------------------------------- /wix311/sdk/inc/timeutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | HRESULT DAPI TimeFromString( 10 | __in_z LPCWSTR wzTime, 11 | __out FILETIME* pFileTime 12 | ); 13 | HRESULT DAPI TimeFromString3339( 14 | __in_z LPCWSTR wzTime, 15 | __out FILETIME* pFileTime 16 | ); 17 | HRESULT DAPI TimeCurrentTime( 18 | __deref_out_z LPWSTR* ppwz, 19 | __in BOOL fGMT 20 | ); 21 | HRESULT DAPI TimeCurrentDateTime( 22 | __deref_out_z LPWSTR* ppwz, 23 | __in BOOL fGMT 24 | ); 25 | HRESULT DAPI TimeSystemDateTime( 26 | __deref_out_z LPWSTR* ppwz, 27 | __in const SYSTEMTIME *pst, 28 | __in BOOL fGMT 29 | ); 30 | 31 | #ifdef __cplusplus 32 | } 33 | #endif 34 | 35 | -------------------------------------------------------------------------------- /wix311/sdk/inc/userutil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | HRESULT DAPI UserBuildDomainUserName( 10 | __out_ecount_z(cchDest) LPWSTR wzDest, 11 | __in int cchDest, 12 | __in_z LPCWSTR pwzName, 13 | __in_z LPCWSTR pwzDomain 14 | ); 15 | 16 | HRESULT DAPI UserCheckIsMember( 17 | __in_z LPCWSTR pwzName, 18 | __in_z LPCWSTR pwzDomain, 19 | __in_z LPCWSTR pwzGroupName, 20 | __in_z LPCWSTR pwzGroupDomain, 21 | __out LPBOOL lpfMember 22 | ); 23 | 24 | HRESULT DAPI UserCreateADsPath( 25 | __in_z LPCWSTR wzObjectDomain, 26 | __in_z LPCWSTR wzObjectName, 27 | __out BSTR *pbstrAdsPath 28 | ); 29 | 30 | #ifdef __cplusplus 31 | } 32 | #endif 33 | -------------------------------------------------------------------------------- /wix311/sdk/inc/wcalog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | BOOL WIXAPI IsVerboseLogging(); 10 | HRESULT WIXAPI SetVerboseLoggingAtom(BOOL bValue); 11 | 12 | #ifdef __cplusplus 13 | } 14 | #endif 15 | -------------------------------------------------------------------------------- /wix311/sdk/inc/wcawow64.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #include "wcautil.h" 6 | 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | 11 | HRESULT WIXAPI WcaInitializeWow64(); 12 | BOOL WIXAPI WcaIsWow64Process(); 13 | BOOL WIXAPI WcaIsWow64Initialized(); 14 | HRESULT WIXAPI WcaDisableWow64FSRedirection(); 15 | HRESULT WIXAPI WcaRevertWow64FSRedirection(); 16 | HRESULT WIXAPI WcaFinalizeWow64(); 17 | 18 | #ifdef __cplusplus 19 | } 20 | #endif 21 | -------------------------------------------------------------------------------- /wix311/sdk/inc/wuautil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 3 | 4 | 5 | #if defined(__cplusplus) 6 | extern "C" { 7 | #endif 8 | 9 | HRESULT DAPI WuaPauseAutomaticUpdates(); 10 | 11 | HRESULT DAPI WuaResumeAutomaticUpdates(); 12 | 13 | HRESULT DAPI WuaRestartRequired( 14 | __out BOOL* pfRestartRequired 15 | ); 16 | 17 | #if defined(__cplusplus) 18 | } 19 | #endif 20 | -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x64/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x64/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x64/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x64/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x64/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x64/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x86/balutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x86/balutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x86/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x86/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x86/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x86/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2010/lib/x86/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2010/lib/x86/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x64/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x64/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x64/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x64/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x64/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x64/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x86/balutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x86/balutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x86/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x86/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x86/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x86/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2012/lib/x86/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2012/lib/x86/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x64/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x64/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x64/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x64/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x64/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x64/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x86/balutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x86/balutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x86/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x86/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x86/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x86/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2013/lib/x86/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2013/lib/x86/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x64/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x64/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x64/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x64/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x64/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x64/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x86/balutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x86/balutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x86/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x86/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x86/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x86/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2015/lib/x86/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2015/lib/x86/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x64/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x64/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x64/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x64/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x64/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x64/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x86/balutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x86/balutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x86/deputil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x86/deputil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x86/dutil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x86/dutil.lib -------------------------------------------------------------------------------- /wix311/sdk/vs2017/lib/x86/wcautil.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/vs2017/lib/x86/wcautil.lib -------------------------------------------------------------------------------- /wix311/sdk/wix.nativeca.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | true 9 | 10 | VS2010 11 | VS2012 12 | VS2012 13 | VS2013 14 | VS2013 15 | VS2015 16 | VS2015 17 | VS2017 18 | VS2017 19 | 20 | VS2015 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /wix311/sdk/x64/sfxca.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/x64/sfxca.dll -------------------------------------------------------------------------------- /wix311/sdk/x86/sfxca.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/sdk/x86/sfxca.dll -------------------------------------------------------------------------------- /wix311/shine.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/shine.exe -------------------------------------------------------------------------------- /wix311/shine.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /wix311/smoke.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/smoke.exe -------------------------------------------------------------------------------- /wix311/smoke.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/torch.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/torch.exe -------------------------------------------------------------------------------- /wix311/torch.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /wix311/wconsole.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/wconsole.dll -------------------------------------------------------------------------------- /wix311/winterop.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/winterop.dll -------------------------------------------------------------------------------- /wix311/wix.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/wix.dll -------------------------------------------------------------------------------- /wix311/wix.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | true 13 | 14 | 15 | 18 | wix2010.targets 19 | 20 | wix200x.targets 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /wix311/x86/burn.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walgr/ChannelAndSign/d92a85cee44dcf75fb16c9ed822d509f621b3066/wix311/x86/burn.exe --------------------------------------------------------------------------------