Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
yeriomin committed Dec 11, 2016
1 parent ba32394 commit c34b862
Show file tree
Hide file tree
Showing 69 changed files with 4,678 additions and 15 deletions.
21 changes: 8 additions & 13 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
*.apk
*.ap_

# Files for the ART/Dalvik VM
# Files for the Dalvik VM
*.dex

# Java class files
Expand All @@ -11,11 +11,11 @@
# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/
/*/build/

# Local configuration file (sdk path, etc)
local.properties
Expand All @@ -26,15 +26,10 @@ proguard/
# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
# From .gitignore generated by Android Studio
*.iml
.idea/workspace.xml

# Keystore files
*.jks
.DS_Store
/captures
/.idea
/gradle*
/.gradle*
20 changes: 18 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,18 @@
# YalpStore
Download apks from Google Play Store
# Yalp Store

## What does it do?
Yalp Store lets you download apps from Google Play Store **as apk files**. It searches for **updates** of installed apps when it starts and lets you **search** for other apps. Thats it. Yalp saves downloaded apks to your default download folder so you can later open it in your favorite file manager app and tap each one to install the apps.

## Why would I use it?
If you are content with Google Play Store app, you will not need this app.

The point of Yalp Store is to be small and independent from Google Services Framework. As time passed, Google Services Framework and Google Play Store apps grew in size, which made them almost too big for old phones (Nexus One has 150Mb memory available for apps, half of it would be taken by Google apps). Another reason to use Yalp Store is if you frequently flash experimental ROMs. This often breaks gapps and even prevents their reinstallation. In this situation Yalp will still work.

## How does it work?
Yalp Store uses the same (protobuf) API the android Play Store app uses. You are going to need a google account to use it. Please, keep in mind that technically **Yalp Store violates** [Android Market Terms of Service](https://www.google.com/intl/en_us/mobile/android/market-tos.html) (§3.3). In theory, you might get your account disabled by using Yalp Store. Thats why you might want to register a separate gmail account and use it at least once to log in to the Play Store android app on any device.

In practice, though, software like Yalp, Google Play Crawler and Raccoon has been used for years and it seems to be safe.

Yalp Store is derived from the following projects:
* https://github.com/Akdeniz/google-play-crawler
* https://github.com/onyxbits/Raccoon
1 change: 1 addition & 0 deletions app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
70 changes: 70 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'

android {
compileSdkVersion 25
buildToolsVersion "25.0.1"

defaultConfig {
applicationId "com.github.yeriomin.yalpstore"
minSdkVersion 10
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
disable 'GoogleAppIndexingWarning','GoogleAppIndexingApiWarning'
}
useLibrary 'org.apache.http.legacy'
sourceSets {
debug {
java {
srcDirs 'src/main/java', "${buildDir}/generated/source/proto/debug/javalite"
}
}
release {
java {
srcDirs 'src/main/java', "${buildDir}/generated/source/proto/release/javalite"
}
}
main {
proto {
srcDir 'src/main/proto'
}
}
}
}

dependencies {
compile group: 'com.google.protobuf', name: 'protobuf-lite', version: '3.0.0'
}

protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.0'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.0.1'
}
javalite {
artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
}
}
generateProtoTasks {
all()*.plugins {
javalite { }
}
ofNonTest()*.plugins {
grpc {
option 'lite'
}
}
}
}
17 changes: 17 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in F:\android-sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
28 changes: 28 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.github.yeriomin.yalpstore">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true">
<activity android:name=".DetailsActivity" android:screenOrientation="portrait" />
<activity android:name=".UpdatableAppsActivity" android:launchMode="singleInstance" android:screenOrientation="portrait" android:label="@string/activity_title_updates">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.default_searchable" android:value=".SearchResultActivity" />
</activity>
<activity android:name=".SearchResultActivity" android:launchMode="singleInstance" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.github.yeriomin.playstoreapi;

public interface DeviceInfoProvider {

AndroidCheckinRequest generateAndroidCheckinRequest();
DeviceConfigurationProto getDeviceConfigurationProto();
String getUserAgentString();
int getSdkVersion();
}
Loading

0 comments on commit c34b862

Please sign in to comment.